我試圖掛鉤一個Linux程序的功能。 基本上搜索使用mprotect取消保護功能,然後將jmp放入原來的函數地址中,重新指向我的函數鉤子。內存複製功能
但是我想複製原始函數,以便在不需要修改函數時可以調用它。 我有一種勾這樣
int CallHookedFunctionFoobar(int param1, int param2)
{
if (g_somevariable)
Foobar_original(param1, param2);
else
Foobar_modified(param1, param2);
}
所以我的問題是...我怎麼能知道一個函數的大小,以字節爲單位,這樣我就可以memcpy的()是動態分配的緩衝區執行它?我想過也許嵌入一個小長度的反彙編器並解析操作碼,直到找到RETN optocode,但我不確定它是否可以在絕對所有情況下工作(例如,如果多個RETN駐留在同一個函數中: [)
,因爲我想這樣做,是因爲同樣的功能可以被其他圖書館迷上另一個原因..
可能是重複的http://stackoverflow.com/questions/4546071/copy-a-function-in-memory-and-execute-it – jbr 2013-04-10 18:52:34