#include <iostream>
#include <windows.h>
#define CSIZE(x) (sizeof(x) / sizeof(char))
// 内联汇编实现计算 模块地址 + 偏移
LPVOID Add(LPVOID lpModule, DWORD dwOffset)
{
LPVOID lpAddr;
_asm {
mov eax, lpModule
add eax, dwOffset
mov lpAddr, eax
}
return lpAddr;
}
int main()
{
// 内联汇编实现计算 模块地址 + 偏移
DWORD *pModule = (DWORD*)0x400000;
LPVOID lpBase = Add(pModule, 0x90F60);
printf("pBase=0x%X\n", lpBase);
/*
// 基址 + 偏移 = 地址,当整数来计算
DWORD dwMod = 0x400000;
DWORD dwBase = dwMod + 0x90F60;
printf("dwBase=0x%X\n", dwBase);
//
DWORD dwMod = 0x400000;
DWORD *pBase = &dwMod;
DWORD *pBase2 = (DWORD*)(*(DWORD*)pBase + 0x90F60);
// 这是别人写的,多级偏移,看着头疼吧
//DWORD *pBaseRole=0x006a9ec0
//DWORD *pRole_Red=(DWORD *)(*(DWORD *)(*(DWORD *)pBaseRole+0x768)+0x5560);
*/
const char pJmp[] = { 0xE9, 0xC6,0xF8,0xFF,0xFF,0x90,0x90,0x90,0x90,0x90,0x90 };
printf("size of pJmp:%d\n", CSIZE(pJmp));
}
转载请注明出处