Blo*_*ood 4 c c++ x86 assembly
我正在努力学习逆向工程,而且我仍然坚持这个小东西.我有这样的代码:
.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
Run Code Online (Sandbox Code Playgroud)
我想知道,它在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
Run Code Online (Sandbox Code Playgroud)
这将在我的游戏控制台中绘制此文本.伙计们,你有什么想法吗?
LEA只不过是算术运算:在这种情况下,ECX只是填充了EAX +偏移量(非常地址,而不是指向的内容).如果HWHandle指向(非常大)的结构,ECX将只是其成员之一.
这可能是一个相关的源代码:
extern A* HWHandle; // mov eax, HWHandle
B* ECX = HWHandle->someStructure; // lea ecx, [eax+1829B8h]
Run Code Online (Sandbox Code Playgroud)
然后,B的一个成员被用作函数.
*(ECX->ptrFunction(someArg)) // mov ecx, [eax+0A0h]
// call ecx
Run Code Online (Sandbox Code Playgroud)