我在學習逆向工程,而我被困在這個小東西上。我有這樣的代碼:如何通過反彙編從C++函數獲取「lea」指令?
.text:10003478 mov eax, HWHandle
.text:1000347D lea ecx, [eax+1829B8h] <------
.text:10003483 mov dword_1000FA64, ecx
.text:10003489 lea esi, [eax+166A98h]<------
.text:1000348F lea edx, [eax+11FE320h]
.text:10003495 mov dword_1000FCA0, esi
,我想知道,它是如何看起來像在C或C++?特別是箭頭標出的兩條指令。 HWHandle
是變量,它保存從GetModuleHandle()
函數返回的值。 更有趣的是,一對夫婦低於這個指導線,dword_1000FCA0
用作功能:
.text:1000353C mov eax, dword_1000FCA0
.text:10003541 mov ecx, [eax+0A0h]
.text:10003547 push offset asc_1000C9E4 ; "\r\n========================\r\n"
.text:1000354C call ecx
這將吸引我的遊戲機這個文本。你有什麼想法嗎,夥計?
我建議你禁用編譯器的代碼優化,因爲它可能會產生一個有時很難理解的機器代碼,並且會有大量的簡化/重寫/重新組織。 – huelbois 2012-03-01 09:50:09
帶有禁用優化的OTOH編譯器引入了看似不必要的加載和存儲到相同的地址,這可能使反彙編難以閱讀,因爲實際發生的少數相關行之間很少。我更喜歡'-O1'。 – hirschhornsalz 2012-03-01 10:00:44
你在做什麼遊戲控制檯?的Xbox? – 2012-03-01 10:04:36