C ++ ASM IDA地址模式

时间:2018-05-25 07:47:35

标签: c++ assembly

我正在尝试为使用Directx9的测试应用程序编写模式查找器,但是我遇到了一些找到正确启动模式的问题。 我试图找到的指针是IDIRECT3D9设备指针。

unsigned long dwStartAddress = 0x14008613F, dwLen = ( 0x14008613F - 0x14008615D );

bool bDataCompare(const unsigned char* pData, const unsigned char* bMask, const char* szMask)
{
    for (; *szMask; ++szMask, ++pData, ++bMask)
        if (*szMask == 'x' && *pData != *bMask)
            return false;
    return (*szMask) == 0;
}

unsigned long dwFindPattern(unsigned char *bMask, char * szMask, unsigned long dw_Address = dwStartAddress, unsigned long dw_Len = dwLen)
{
    for (unsigned long i = 0; i < dw_Len; i++)
        if (bDataCompare((unsigned char*)(dw_Address + i), bMask, szMask))
            return (unsigned long)(dw_Address + i);
    return 0;
}

我在d3d9.h文件中挖掘并查看了此处找到的Microsoft DirectX SDK示例项目(2009年8月)https://www.microsoft.com/en-us/download/details.aspx?id=23549

根据https://msdn.microsoft.com/en-us/library/windows/desktop/bb219676(v=vs.85).aspx Direct3DCreate9Ex检查是否支持D3Dx9ex功能。

根据https://msdn.microsoft.com/en-us/library/windows/desktop/bb174313(v=vs.85).aspx Direct3DCreate9 :: CreateDevice返回指针

enter image description here

下面我假设我可以在0x14008613F开始我的地址扫描并在(0x14008613F - 0x14008615D)结束

我也在假设

jnz short loc_14008615E
mov [rbx+0E8h], eax

是我正在寻找的设备指针的位置。与

[rbx+0E8h]

是从Direct3DCreate9 :: CreateDevice

返回的指针

我希望我能够提供足够的信息,因为这是我第一次尝试进行任何真正的记忆操作。

编辑: 这里重要的是我的签名和面具:

DWORD  m_dwaddy = dwFindPattern((PBYTE)"\x00\x48\x8B\xF8", (char *)"?xxx");

0 个答案:

没有答案