我试图挂钩一个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