最初由 jackie 发布
是这样,但用的时候SoftICE停的地方是
USER32!SendDlgItemMessageA+00A7
不是GetDlgItemTextA的领空
F12后直接就出来了,程序运行跳出对话框说输入不对
>>USER32!SendDlgItemMessageA+00A7
>>001B:77D365F9 E9B9A5FFFF JMP 77D30BB7
>>USER32!GetDlgItemTextA
>>001B:77D365FE 55 PUSH EBP
>>... MOV EBP, ESP
>> PUSH DWORD PTR [EBP+0C]
>> PUSH DWORD PTR [EBP+08]
>> CALL USER32!GetDlgItem
>> TEST EAX, EAX
>> JZ ...
是断在USER32!GetDlgItemTextA那里。
只不过代码窗口的第一行是USER32!SendDlgItemMessageA+00A7说明
001B:77D365F9 E9B9A5FFFF JMP 77D30BB7
这一行是USER32模块,SendDlgItemMessageA函数里的代码。
USER32!GetDlgItemTextA
代表下面的代码是GetDlgItemTextA函数的代码呀!还有你断在那有颜色区别
的吧。
>>停在DLL中
>>此时如果Ctrl + D 隐去SoftICE则一闪有出现SoftICE界面,
不要按CTRL+D,按F11或者一次F12+F8,这样就回到TraceMe的领空了!
还有我说一下F11和F12的功能吧。
F11的功能是执行地址。不明白什么意思?
1 push eax
2 push ebx
3 call fun1
4 push eax
5 push ebx
6 call fun2
比如你在函数fun1下了断点,断了下来后是在fun1的代码里面的,你直接按F11就回到调用fun1函数的代码的下一句了(4 push eax)。
F12就是停在下一个RET那里。
还有《加第二版》117页,“按F12键,回到调用函数的地方,此时代码窗口和数据窗口之间的一行。。。。。。。。”应该改成按F11吧。