【问题标题】:C++ ASM get address of MOVC++ ASM 获取 MOV 的地址
【发布时间】:2015-02-19 05:40:48
【问题描述】:

我在 ASM 中有以下行

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

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

我希望可以这样做:

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)
}

_____我的记录器____ 这是我的地址记录器,它获取 ASM 行 0x004F73BB playerpointer 和 server 指针都很容易获得,因为字节模式指向一个 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", "\xA4\xA2\xAE\x00", "xxx?", "A4 A2 AE 00, xxx?");
        add_log("ADR_ServerPointer", "\x48\x92\xAE\x00", "xxx?", "A1 48 92 AE 00, xxx?");
        add_log("OFS_5thSlot", "\x75\x09\xC6\x83\x54\x41\x03\x00\x01", "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;
}

如果您需要更多信息,请发表评论。

【问题讨论】:

  • 听起来你想智能地反汇编一些字节的机器码?更好地研究使用反汇编库,例如Capstone.
  • 我正在为游戏编写地址记录器。我不需要图书馆。
  • 那么我不知道你在问什么。你的输入是什么?一串文字?
  • 输入应该是某种形式的整数。
  • 目前还不清楚你到底想做什么。您是否正在尝试修改当前进程中的内存?

标签: c++ assembly


【解决方案1】:

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

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

【讨论】:

  • 我不认为那是我要找的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多