如何挂钩我自己进程的所有操作系统调用?

时间:2011-05-22 20:46:33

标签: windows api macos hook

我需要劫持我自己进程的所有操作系统调用。我不能重写代码,因为它部分不是我的代码(插件)。如果我想调用原始实现,我需要能够在特定系统调用的实现中做出决定。

操作系统将首先是windows xp及更高版本。随后os x 10.5及更高版本将随之而来。从具有32位版本的Windows开始,稍后对于所有操作系统也是64位版本。

我找到了很多关于挂钩其他进程的文档和工具,但我希望我的工作更简单,我希望能有一些源代码。

非常感谢Bernd。

3 个答案:

答案 0 :(得分:1)

有许多挂钩库可以让你这样做,例如在Windows上使用Detours或madCodeHook。毫无疑问,OSX上有类似的库,我只是不知道它们!

挂钩例程并将其替换为您自己的实现非常容易。在某些情况下保留运行原始例程的选项并不容易,而且使用挂钩库会让你痛苦不堪。

答案 1 :(得分:1)

在Mac OS X上,您可以使用DYLD_INTERPOSE宏覆盖功能(如果需要,可以覆盖DYLD_INSERT_LIBRARIES)。这个答案有一个例子:Ansi C patch using dlsym compiles OK under linux but fails on Mac Os X

答案 2 :(得分:0)