首先用OllyDbg調(diào)試工具打開在VS中寫好的HelloWorld.exe程序。

打開之后,彈出了提示框,提示入口點(diǎn)在代碼外。調(diào)試器的停止地點(diǎn)和書上描述不一樣,第一條并不是CALL,而是
MOV DWORD PTR SS:[ESP+8],EBX
第二條指令為
JMP ntdll.778705B9
離當(dāng)前指令的7787FFA8還是距離挺遠(yuǎn)。
跳至778705B9處:

跳轉(zhuǎn)后首先將EBP壓棧,再將ESP傳給EBP,此時(shí)的ESP為00BEF868:

經(jīng)過兩個(gè)沒什么用的CALL之后

發(fā)現(xiàn)此處PUSH了 ntdll.77907D40,暫時(shí)不知道PUSH的什么東西,然后進(jìn)入779705E1處的CALL

終于到了書上所描述402524處的指令段,此處并沒有調(diào)用MessageBox()API,不是所要尋找的main()函數(shù),繼續(xù)向下

在進(jìn)入000A110E后,在下面的指令中發(fā)現(xiàn)了MessageBoxW,初步猜測此處為main()函數(shù)內(nèi)部

之后在進(jìn)行跟蹤幾步之后

重新進(jìn)行一次調(diào)試,F(xiàn)8進(jìn)行指令跳轉(zhuǎn),發(fā)現(xiàn)CALL 000A1AD0處執(zhí)行了MessageBox(),初步判定000A1AD0處為main()函數(shù)

在name in all modules 中查找MessageBoxW
發(fā)現(xiàn)在如下地址:

在此處設(shè)置斷點(diǎn),然后F9繼續(xù)執(zhí)行,執(zhí)行到此處后,棧信息顯示如下

得到00D516EE處調(diào)用的MessageBoxW,查找此處發(fā)現(xiàn)了要找的信息:

在此處設(shè)置斷點(diǎn)提示在代碼有效空間外,ALT+M調(diào)出memory。得到如下信息

00D51000至00D56000之間的信息被壓縮過。難怪調(diào)試的時(shí)候那么奇怪