C++ASM获取MOV的地址

C++ ASM get address of MOV

本文关键字:地址 MOV 获取 C++ASM      更新时间:2023-10-16

我在ASM 中有以下行

_:004F73BB C6 83 54 41 03 00 01     mov  byte ptr [ebx+34154h], 1

在c++中,我需要返回34154h的值作为地址(0x31454)

我希望可以这样做:

void getADR(BYTE *ptr1){//something like this?
     __asm{//i don't know how to call this at 004F73BB
          mov [ptr1], ebx
          mov  byte ptr [ebx+34154h], 1
     }
     // return ((BYTE)0x004F73BB - ptr1)
}

_____MY记录器____这是我的地址记录器,它获取ASM行0x004F73BB播放器指针和服务器指针都很容易获得,因为字节模式指向MOV,而MOV返回自己的指针。

DWORD FindPattern(DWORD dwAddress, DWORD dwLen, BYTE *bMask, char * szMask)
{
    for (DWORD i = 0; i < dwLen; i++)
    if (Match((BYTE*)(dwAddress + i), bMask, szMask))
        return (DWORD)(dwAddress + i);
    return 0;
}
void SearchPatterns(void)
{
    while (true){
        add_log("ADR_PlayerPointer", "xA4xA2xAEx00", "xxx?", "A4 A2 AE 00, xxx?");
        add_log("ADR_ServerPointer", "x48x92xAEx00", "xxx?", "A1 48 92 AE 00, xxx?");
        add_log("OFS_5thSlot", "x75x09xC6x83x54x41x03x00x01", "xxxxxxx?x", "75 09 C6 83 54 41 03 00 01, xxxxxxx?x");
        ExitProcess(0);
    }
}

BOOL WINAPI DllMain(HMODULE hDll, DWORD dwReason, LPVOID lpReserved)
{
    //DisableThreadLibraryCalls(hDll);
    if (dwReason == DLL_PROCESS_ATTACH)
    {
        logging(hDll);
        CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)SearchPatterns, NULL, NULL, NULL);
    }
    return TRUE;
}

如果您需要更多信息,请留下评论。

有了这一点信息,只需将字节加载到char数组中,读取索引2、3、4、5处的值,然后进行一些小端/大端数学运算。或者生成一个int*,使其指向数组中的索引2并读取该值。

或者,如果您知道二进制文件中的偏移量,请读取exe文件,然后将int*指向该位置并读取值。