C 成員函式的HOOK

2021-05-24 15:03:07 字數 1073 閱讀 6366

今天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來實現鉤子 這段 被系統通過系統呼叫,把其掛入系統中,然後我就可以對我感興趣的訊息...