| 发表于:2007-07-17 17:42:3730楼 得分:0 |
template <typename t> pvoid queryvirtualfunaddress(pvoid pinstance, t pmemfun) { if (!pinstance) return null; const dword dwcode1 = 0x0424448b; const dword dwcode2 = 0xa0ff008b; const dword dwcode3 = 0x20ff008b; pdword dwcode = (pdword)(dword_ptr)*(pdword)&pmemfun; dword index = 0; if (dwcode[0] != dwcode1) return null; if (dwcode[1] == dwcode3) index = 0; else if (dwcode[1] == dwcode2) index = (int)dwcode[2] / 4; else return null; pdword addr = (pdword)(dword_ptr)(pinstance); pdword vptr = (pdword)(dword_ptr)(*addr); return (pvoid)(vptr[index]); } void* p = queryvirtualfunaddress(g_pd3ddevice, &idirect3ddevice9::setrenderstate); 没任何移植性,在windows + vc2005 才良好 我就只能想出这个办法了 | | |
|