2018年6月12日 星期二

[C#] callback and delegate

使用hook function的時候需要餵入一個function pointer
hook function的參數要求是



void SetHookFunction(...,HookFunctionPtr hookFunctionPtr ,...)

HookFunctionPtr的定義是

public delegate void HookFunctionPtr(Type1 par1, Type2 par2....);

如果有一個Function

void MyHookFunction(Type1 par1, Type2 par2....)

在形別檢查上是可以直接呼叫

SetHookFunction(...MyHookFunction....);
但這樣在runtime的時候會不斷隨機(程式一開始可以正常執行)的莫名終止
一度以為是因為記憶體回收機制導致MyHook無法正常被呼叫,但嘗試著把MyHook設為Static依然是無解

後來才發現需要再以一個delegate變數去儲存

首先,先建立HookFunctionPtr型別的變數

HookFunctionPtr myHookFunctionPtr;

在建立一個delegate的物件

myHookFunctionPtr = new HookFunctionPtr (MyHookFunction);

最後再Hook上去就沒有問題了

SetHookFunction(...myHookFunctionPtr ....);


沒有留言:

張貼留言