在 Mac 中监控调用 dylib 的参数

Monitor arguments of call to dylib in Macos

我想要类似于 apimonitor 但适用于 Mac 的东西。已经有这样的东西了吗?谢谢你。我希望能够知道应用程序在调用 dylib 函数时使用的参数。

您有多种选择:

您是否考虑过将调试器(即 lldb)附加到应用程序,在感兴趣的函数上设置断点,然后观察参数?您可以设置断点以自动打印参数然后继续。

您可以使用 DTrace 的 pid 提供程序。系统完整性保护 (SIP) 禁用了大部分 DTrace。我不记得 pid 提供者是否存在。如果它被禁用,您可以在启动到恢复模式时使用 csrutil 命令 (csrutil enable --without dtrace) 启用它。

无论如何,使用 pid 提供程序的命令是:

sudo dtrace -n 'pid$target:library pattern:function pattern:entry { actions }' -p <PID of target>

模式是文件全局样式,使用 * 匹配任何字符,使用 ? 匹配单个字符。

动作可以是 ustack(); 转储用户堆栈,printf("%x\n", arg0); 打印第一个参数等。有关更多信息,请参阅 DTrace 手册。

最后,您可以使用DYLD_INSERT_LIBRARIES环境变量来注入您自己的库。反过来,该库可以使用 dyld symbol interposing 来安装您自己的一个或多个给定函数版本,它可以做任何您想做的事情。它可以调用原始文件,从而充当包装器。

请注意,SIP 也会干扰将 DYLD_* 环境变量传递给可执行文件。