今天hook d3d9中的setmaterial發現出現堆疊失衡現象,後來研究發現是因為,對於如下的呼叫:
hresult _stdcall setmaterial(d3dmaterial9 *pmaterial);
d3dmaterial9 mtrl;
::zeromemory( &mtrl, sizeof(d3dmaterial9) );
mtrl.diffuse.r = mtrl.ambient.r = 1.0f;
mtrl.diffuse.g = mtrl.ambient.g = 1.0f;
mtrl.diffuse.b = mtrl.ambient.b = 1.0f;
mtrl.diffuse.a = mtrl.ambient.a = 1.0f;
g_pd3ddevice->setmaterial( &mtrl );
逆向分析後是如此:
:00402582 push ecx //pmaterial
.text:00402583 mov edx, g_pd3ddevice
.text:00402589 mov eax, [edx]
.text:0040258b mov ecx, g_pd3ddevice
.text:00402591 push ecx //this
.text:00402592 call dword ptr [eax+0c4h]
如果只是簡單的用函式mysetmaterial:
hresult _stdcall mysetmaterial( d3dmaterial9 *pmaterial);
那麼堆疊平衡就遭到破壞,所以,根據上面的逆向結果來看,mysetmaterial函式的原型應該如下:
hresult _stdcall mysetmaterial(pdword pdwthis, d3dmaterial9 *pmaterial
);
編寫hook函式,改寫hook函式
在conftest裡面加上這麼乙個函式,那麼在命令列裡面使用pytest 會出現如下效果 編寫 命令列新增引數 def pytest addoption parser mygroup parser.getgroup hogwarts group 將下面所有的option都展示最這個group下 my...
HOOK乙個C函式
hook乙個c函式需要用到的開源庫fishhook fishhook只能hook系統自帶的c函式,自定義的不可 2,將fishhook.h 和 fishhook.c檔案匯入專案中,引用標頭檔案 3,定義乙個全域性變數作為載體,防止迴圈呼叫替換方法 static void orig close 4,在...
鉤子(HOOK)函式
我的理解是 鉤子函式可以 鉤住 我喜歡的東西 在window中就是我喜歡的訊息 這應該就是鉤子函式叫鉤子函式的原因吧。鉤子函式的意義 用處 在於 我寫了乙個window程式,在程式中我寫了一段 呼叫window的api來實現鉤子 這段 被系統通過系統呼叫,把其掛入系統中,然後我就可以對我感興趣的訊息...