首先用OllyDbg调试工具打开在VS中写好的HelloWorld.exe程序。
打开之后,弹出了提示框,提示入口点在代码外。调试器的停止地点和书上描述不一样,第一条并不是CALL,而是
MOV DWORD PTR SS:[ESP+8],EBX
第二条指令为
JMP ntdll.778705B9
离当前指令的7787FFA8还是距离挺远。
跳至778705B9处:
跳转后首先将EBP压栈,再将ESP传给EBP,此时的ESP为00BEF868:
经过两个没什么用的CALL之后
发现此处PUSH了 ntdll.77907D40,暂时不知道PUSH的什么东西,然后进入779705E1处的CALL
终于到了书上所描述402524处的指令段,此处并没有调用MessageBox()API,不是所要寻找的main()函数,继续向下
在进入000A110E后,在下面的指令中发现了MessageBoxW,初步猜测此处为main()函数内部
之后在进行跟踪几步之后
重新进行一次调试,F8进行指令跳转,发现CALL 000A1AD0处执行了MessageBox(),初步判定000A1AD0处为main()函数
在name in all modules 中查找MessageBoxW
发现在如下地址:
在此处设置断点,然后F9继续执行,执行到此处后,栈信息显示如下
得到00D516EE处调用的MessageBoxW,查找此处发现了要找的信息:
在此处设置断点提示在代码有效空间外,ALT+M调出memory。得到如下信息
00D51000至00D56000之间的信息被压缩过。难怪调试的时候那么奇怪