DWORD PresentEngine = FindPattern(0x400000, 0xFFFFFF,(PBYTE)"\x8B\x51\x00\x6A\x00\x6A\x00\x6A\x00\x50\xFF\xD2\xB8\x00\x00\x00\x00\xE8\x00\x00\x00\x00\xC7\x05\x00\x00\x00\x00","xx?x?x?x?xxxx????x????xx????");
bool bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
for(;*szMask;++szMask,++pData,++bMask)
if(*szMask=='x' && *pData!=*bMask)
return 0;
return (*szMask) == NULL;
}
DWORD FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask)
{
for(DWORD i=0; i<dwLen; i++)
if (bCompare((BYTE*)(dwAddress+i),bMask,szMask))
return (DWORD)(dwAddress+i);
return 0;
}

BeginScene = vTable[41] || 41 = 0x29 = 0x29 * 0x4 = 0xA4; EndScene = vTable[42] || 42 = 0x2A = 0x2A * 0x4 = 0xA8; DrawIndexPrim = vTable[82] || 82 = 0x52 = 0x52 * 0x4 = 0x148; PresentEngine = vTable[17] || 17 = 0x11 = 0x11 * 0x4 = 0x44;