【问题标题】:Monitor arguments of call to dylib in Macos在 Macos 中监视调用 dylib 的参数
【发布时间】:2018-12-16 18:53:25
【问题描述】:

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

【问题讨论】:

  • 而不是指apimonitor,说明你想做独立于其他工具做什么。您对什么 dylib 感兴趣?有哪些功能?您是否正在尝试检查您自己的应用程序或其他应用程序的行为?为什么您想知道应用程序使用的参数以及您希望如何处理这些信息? (这可能对我们完全推荐可能的替代方法很有用。)
  • 我想检查来自第三方应用程序的调用,以便检查发送到 dylib 文件中函数的参数。由于我无权访问源代码,这归结为逆向工程。

标签: macos dylib


【解决方案1】:

您有多种选择:

您是否考虑过将调试器(即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_* 环境变量传递给可执行文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2015-05-13
    相关资源
    最近更新 更多