帮忙看下这段代码,谢谢
LPVOID NewModule;
LPDWORD lpimagesize;
Module = GetModuleHandle(NULL);//进程映像的基址
_asm
{
push eax;
push ebx;
mov ebx,Module;
mov eax,[ebx+0x3c];
lea eax,[ebx+eax+0x50];
mov eax,[eax]
mov lpimagesize,eax;
pop ebx;
pop eax;
};
小弟刚刚学汇编,不理解上面这段代码,是C语言嵌入进去的,请高手帮忙转成C看看,谢谢了!
模块句柄(Module Handle)就是该模块装载到内存的地址
HMODULE Module;
LPDWORD lpimagesize;
Module = GetModuleHandle(NULL);//进程映像的基址
_asm
{
push eax;
push ebx;
mov ebx,Module; // 模块句柄(Module Handle)就是该模块装载到内存的地址
mov eax,[ebx+0x3c]; // 在MZ头中定位PE头
lea eax,[ebx+eax+0x50]; // 在PE头中(实际上是IMAGE_OPTIONAL_HEADER)定位SizeOfImage字段
mov eax,[eax]
mov lpimagesize,eax;
pop ebx;
pop eax;
};
大概是这样:
LPVOID lpModule;
DWORD iOffPE;
LPDWORD lpimagesize;
lpModule = (LPVOID)GetModuleHandle(NULL);
iOffPE = *(LPDWORD)((LPBYTE)lpModule + 0x3c);
lpimagesize = (LPDWORD)((LPBYTE)lpModule + iOffPE + 0x50);