学习od, 偶有所得, 分享, 高手请无视.

一直知道od有条件断点, 一直不太会用, 终于下决心学了下, 有点所得, 与大家分享.

首先感谢 http://bbs.pediy.com/showthread.php?threadid=16494 , 由这儿学到怎么用, 而且有个图, 很直接明了.

下面就是我的所得了.
1, 条件断点的条件 应该是可以断寄存器的值或寄存器指向的地址的值的.
eax==1 是eax等于1时断.
[esp+8]==2f2f 是断esp+4指向的值为0x2f2f. 这种可以断一些函数类的参数, 如send( SOCKET s,  const char FAR *buf,  int len,  int flags   );的第3个参数是直接值, 就可以用[esp+8]表示了(是指直接断在call ws2_32.send这行上).
[[esp+8]]==4b4f 就是esp+8的地址所指向的4字节的内容了. 这个后面会有个图示例.

2, 条件断点, 可以选择断或继续运行, 同时做些记录. 菜鸟所得, 一直不知道od可以断点然后继续运行的, 唉, 丢人大了. 有这个选择后就可以向windbg一样, 遇到断点, 记录某些状态然后记程序继续运行了.

3, 下断的窗口中 记录函数参数 的选项不是总为可用, 如果断在函数上才会可用, 断在一些非调用函数的指令是不可用的.

关于几个基本点, 很简单, 说一下.
ALT+L会打开记录窗口, 我们从这儿看断点记录.
ALT+C会打开CPU窗口, 我们在这儿下断.
CTRL+F2会重新运行程序.

下面上图.
1, 设置断点的位置, 当然可以shift+f4了, 或者右键操作也行.

我们的主题即然说是示例就会提供一个大家实验的平台. 有个ok.rar做为附件提交上来了, 大家如果想实验一下的话, 可以下载了玩. 里面有exe,也有源码.

图1
设置断点在MessageBoxA上, 参数3为OK, 遇断暂停程序, 记录第2参数的值,不显示函数参数.

图2
就是上面设置断点的结果查看了. 当然了, 第一步会在MessageBoxA上停下来.

图3
设置断点在MessageBoxA, 参数3为OK, 遇断不停继续, 记录第2参数的值, 显示函数参数.

图4
就是图3断点的结果查看了, 当然, 因为设置了遇断不停, 程序会直接弹出框来, 然后不会断住.


实验程序的源码包:OK.rar