我正在尝试为使用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返回指针
下面我假设我可以在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");