《逆向工程核心原理》-- 调试HelloWorld.exe程序

首先用OllyDbg调试工具打开在VS中写好的HelloWorld.exe程序。


《逆向工程核心原理》-- 调试HelloWorld.exe程序_第1张图片

打开之后,弹出了提示框,提示入口点在代码外。调试器的停止地点和书上描述不一样,第一条并不是CALL,而是

MOV DWORD PTR SS:[ESP+8],EBX

第二条指令为

JMP ntdll.778705B9

离当前指令的7787FFA8还是距离挺远。
跳至778705B9处:

《逆向工程核心原理》-- 调试HelloWorld.exe程序_第2张图片

跳转后首先将EBP压栈,再将ESP传给EBP,此时的ESP为00BEF868:


经过两个没什么用的CALL之后



发现此处PUSH了 ntdll.77907D40,暂时不知道PUSH的什么东西,然后进入779705E1处的CALL

《逆向工程核心原理》-- 调试HelloWorld.exe程序_第3张图片

终于到了书上所描述402524处的指令段,此处并没有调用MessageBox()API,不是所要寻找的main()函数,继续向下


《逆向工程核心原理》-- 调试HelloWorld.exe程序_第4张图片

在进入000A110E后,在下面的指令中发现了MessageBoxW,初步猜测此处为main()函数内部


《逆向工程核心原理》-- 调试HelloWorld.exe程序_第5张图片

之后在进行跟踪几步之后
《逆向工程核心原理》-- 调试HelloWorld.exe程序_第6张图片

重新进行一次调试,F8进行指令跳转,发现CALL 000A1AD0处执行了MessageBox(),初步判定000A1AD0处为main()函数

《逆向工程核心原理》-- 调试HelloWorld.exe程序_第7张图片

在name in all modules 中查找MessageBoxW
发现在如下地址:

《逆向工程核心原理》-- 调试HelloWorld.exe程序_第8张图片

在此处设置断点,然后F9继续执行,执行到此处后,栈信息显示如下


得到00D516EE处调用的MessageBoxW,查找此处发现了要找的信息:

《逆向工程核心原理》-- 调试HelloWorld.exe程序_第9张图片

在此处设置断点提示在代码有效空间外,ALT+M调出memory。得到如下信息

《逆向工程核心原理》-- 调试HelloWorld.exe程序_第10张图片

00D51000至00D56000之间的信息被压缩过。难怪调试的时候那么奇怪

你可能感兴趣的:(《逆向工程核心原理》-- 调试HelloWorld.exe程序)