在 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_*
环境变量传递给可执行文件。
我想要类似于 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_*
环境变量传递给可执行文件。