【发布时间】:2015-08-18 14:28:29
【问题描述】:
我在 Windows 下使用 Detours (http://research.microsoft.com/en-us/projects/detours/),但现在我使用 Linux Ubuntu 并且我想 Detour /挂钩一个函数。 我想绕道去我的函数,之后我想调用原始函数。 (我可以hook函数,但之后就不能使用原来的了)。
所以,我决定写一个detour函数。首先,我将函数复制到另一个地方,但我无法执行它。你能帮我吗,为什么我不能执行它?我遇到了分段错误。
我的代码:
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: %d\n", 1); // segmentation fault HERE
谢谢!
Com_Printf 在“可执行文件”(IDA Pro)中: 图片:http://kepfeltoltes.hu/150818/ida_printf_www.kepfeltoltes.hu_.png
在 VirtualBox 中运行的 Linux。 (会是问题吗?)
【问题讨论】:
-
我发现了 this 模板的优点,可能对你有帮助。
-
它没用 :( 再次出现分段错误...
-
是什么让你认为显然是任意地址 0x08060dea 的内存包含函数指令?并不是说它没有 - 但这绝对不是 MCVE 原样......
-
我是从 Ida Pro 那里想到的:kepfeltoltes.hu/150818/ida_printf_www.kepfeltoltes.hu_.png
标签: c++ linux ubuntu hook detours