Linux Ubuntu下的绕道功能

Detour function under Linux Ubuntu

本文关键字:功能 Ubuntu Linux      更新时间:2023-10-16

我在Windows下使用Detours (http://research.microsoft.com/en-us/projects/detours/),但现在我使用Linux Ubuntu,我想要Detour/Hook一个函数。我想绕过这个函数,然后再调用原来的函数。(我可以钩子函数,但我不能使用原来的)。

所以,我决定写一个绕道函数。首先,我把函数复制到另一个地方,但是我不能执行它。你能帮我,为什么我执行不了吗?分割错误 我代码:

int (* h_Com_Printf)(const char *fmt, ...);
...
void *memBuffer;
int size = 0x4F; // size of the function
memBuffer = (void*)malloc(size);
memcpy(memBuffer, (void*)0x08060DEA, size); // copy the function
h_Com_Printf = (int (*)(const char *fmt, ...))memBuffer;
h_Com_Printf("print function: %dn", 1); // segmentation fault HERE

谢谢!

Com_Printf在"executable file" (IDA Pro)中:图片:http://kepfeltoltes.hu/150818/ida_printf_www.kepfeltoltes.hu_.png

Linux在VirtualBox中运行。(这是问题吗?)

仅仅复制函数字节是不够的,即使您知道if的确切大小(并非总是如此),因为有许多指令是相对于EIP的(例如,在您的示例中调用_vsnprintf)。因此,通常所做的(事实上,Detours正在做的)是只复制被钩子代码(JMP或CALL)覆盖的字节,并重新计算与eip相关的偏移量。为此,您需要能够解码指令并在必要时重新计算相对偏移量的反汇编器。弯路实际上包括一个。我建议您查看Detours源代码,以便更好地理解放置钩子需要做些什么。

希望能有所帮助