《逆向工程核心原理》-- 调试HelloWorld.exe程序
2017-04-03 本文已影响0人
Cichar
首先用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之间的信息被压缩过。难怪调试的时候那么奇怪