【发布时间】:2018-09-21 08:07:19
【问题描述】:
当使用特定参数调用某些系统调用时,是否有一种使用现成工具的直接方法来暂停跟踪进程的执行?具体来说,我想随时暂停程序执行
stat("/${SOME_PATH}")
或
readlink("/${SOME_PATH}")
被调用。然后我的目标是附加一个调试器,以便我可以识别链接到进程的数百个共享对象中的哪些正在尝试访问该特定路径。
strace 向我展示了系统调用,其余的由 gdb 完成。问题是,如何将它们结合在一起。这当然可以通过自定义胶水脚本来解决,但我宁愿使用干净的解决方案。
手头的问题是第 3 方工具套件,它仅以二进制形式提供,并且该分发包完全违反 LSB/FHS 和良好的礼仪,并将共享对象放置在整个文件系统中,其中一些是从不可配置的路径加载的。我想确定工具套件的哪些模块尝试执行此操作,然后修补二进制文件或向供应商提交问题。
【问题讨论】:
-
特定于操作系统的东西可以吗?使用
systemtap和dtrace在使用某些参数进行系统调用时向进程发送SIGSTOP 很容易,但它们并不存在于任何地方(并且需要提升权限)。 -
目标操作系统是Linux,所以dtrace可用。 @Afshin 的回答也很合适,但是我也想看看 dtrace 解决方案。
标签: debugging gdb reverse-engineering system-calls strace