右下角的堆栈窗口是下不了断点的,要在左下角的窗口里下。在左下角的窗口里右键-断点-硬件访问-Word就行了。~
在当前行按[ShiftF2]键-条件断点(这个不太好用,因为程序BUG偶尔失效)。
在当前行按[ShiftF4]键-条件记录断点(只要设置上条件语句和按什么条件生效就可以了)。
[EAX]==05201314 ;比如EAX的值为00401000,而地址00401000处所指向的值等于5201314时,即EAX的值表示为指针。
[[EAX]]==05201314 ;比如EAX的值为00401000,地址00401000处所指向的值为00402000,而地址00402000处所指向的值等于5201314时,即EAX的值表示为指针的指针。
EAX==05201314EBX==0x05201314;当EAX的值等于5201314(十进制),并且EBX的值等于5201314(十六进制)时。
[EAX]=="coderui" ;比如EAX的值为00401000,而地址00401000处所指向的字符串为“coderui”时,即EAX的值表示为指针。
原理:就是在消息函数上设置条件断点。
1、使用[CtrlG]呼出“表达式跟随窗口”,输入“TranslateMessage”,然后回车。
2、在“转到”的位置上使用[ShiftF4]呼出“条件记录断点设置窗口”。
3、在“条件”中输入如下语句“[[ESP4]]==当前按钮句柄[[ESP4]4]==WM_LBUTTONUP”。
4、把“暂停程序”设置为“按条件”,其他都为默认,然后确定。
5、点击按钮后,程序会停在“TranslateMessage”函数的系统领空中。
6、查看内存,对代码段下“内存访问断点”,然后经过多次[F9](运行),就会找到关键的处理代码了。
以下命令适用于OllyDbg的快捷命令栏插件(显示于程序的状态栏上方)
在地址进行反汇编
转存为反汇编代码
转存在十六进制字节格式
转存在十六进制字词格式
前往堆栈中的地址
断点清除位于全部调用的断点
内存断点于访问时
内存断点于写入时
停止运行程序调试
运行程序进行调试
跟踪进入直到地址
跟踪步过直到地址
跟踪进入直到条件
跟踪步过直到条件
反汇编直接的机器码
查找参考到选定的命令/地址
在当前模块中搜索名称(标号)
打开一个新的可执行程序(F3)
重新运行当前调试的程序(CtrlF2)
运行选定的程序进行调试(F9)
暂时停止被调试程序的执行(F12)
单步进入被调试程序的Call中(F7)
步过被调试程序的Call(F8)
跟入被调试程序的Call中(CtrlF11)
跟踪时跳过被调试程序的Call(CtrlF12)
打开调试选项窗口(AltO)
bpRegOpenKeyExA,然后按Enter键就行了。意思就是在这个函数的入口下断点了,但汇编窗口并不会转这个地址,就是说窗口内容仍然是不变的。
你看到的跳转到一个内存地址,我猜是这样的。他按Enter之后,又按了F9运行,然后中断到了这个地址,停下来了。
至于用命令下断,看你下什么断点用不同的命令。像上面的bp,它的作用就是在地址上改写内容为cc,就是int3断点。还有内存断点用mr,mw吧,硬件断点用hr,hw,he......一般的教程上都有的。