我想从另一个进程中挂钩库(lib.so或lib.dylib)中的函数。我知道与Windows库不同,Linux和Mac中的库仍具有其符号(函数名称和参数)。

API Monitor(http://www.rohitab.com/apimonitor)允许您钩挂导出其他库中的函数,但仅适用于Windows,这是我所需要的。

我基本上想在linux或mac中挂接某些函数,并查看它们的参数和调用顺序。

感谢您的帮助!

评论

该apimonitor软件看起来很棒。我确实在Google中搜索了apimonitor,然后回来了Valgrind

#1 楼

您可以在运行目标之前简单地导出环境变量LD_PRELOAD(在Linux上)或DYLD_INSERT_LIBRARIES(在OS X上)指向您的库(的完整路径),例如以下示例:

https:/ /stackoverflow.com/questions/6083337/overriding-malloc-using-the-ld-preload-mechanism

这是用于使函数挂钩以执行您想要的任何事情(而不是监视函数调用)。 br />

#2 楼

检查跟踪系列:


ltrace:库跟踪器
strace:内核调用(系统调用)跟踪器
ptrace:可编程跟踪器

还:


radare的itrace



#3 楼

对于OS X,dtrace应该可以解决问题。 dtrace应该也适用于Linux,尽管我不知道它的支持程度如何,而且我相信那里还有其他等效的工具。

评论


我看到了带有系统调用的dtrace示例,但没有其他库的示例。可以将dtrace用于游戏,以查看特定库(例如engine.dylib)中正在调用哪些函数,以及其参数。

– TerryW
13年5月27日下午5:56

是的,PID提供程序可以做到这一点:dtrace.org/guide/chapter30.html

– microtherion
13年5月27日在15:01