我想从另一个进程挂接库(lib.so
或lib.dylib
)中的函数。我知道与 Windows 库不同,Linux 和 Mac 中的库仍然有它们的符号(函数名称和参数)。
API Monitor允许您从其他库中挂钩导出的函数,但仅适用于 Windows,这在某种程度上是我所需要的。
基本上我想在 Linux 或 mac 中挂钩某些函数并查看它们的参数和调用顺序。
任何帮助表示赞赏!
我想从另一个进程挂接库(lib.so
或lib.dylib
)中的函数。我知道与 Windows 库不同,Linux 和 Mac 中的库仍然有它们的符号(函数名称和参数)。
API Monitor允许您从其他库中挂钩导出的函数,但仅适用于 Windows,这在某种程度上是我所需要的。
基本上我想在 Linux 或 mac 中挂钩某些函数并查看它们的参数和调用顺序。
任何帮助表示赞赏!
在运行目标之前,您可以简单地导出指向(完整路径)库的环境变量LD_PRELOAD
(在 Linux 上)或DYLD_INSERT_LIBRARIES
(在 OS X 上),如下例所示:
https://stackoverflow.com/questions/6083337/overriding-malloc-using-the-ld-preload-mechanism
这是用于挂钩函数以执行您想要的任何操作(而不是监视函数调用)。
对于 OS X,dtrace应该可以解决问题。dtrace 也应该存在于 Linux 中,尽管我不知道它的支持情况如何,而且我相信那里还有其他等效的工具。