系统相关
首页 > 系统相关> > linux – 了解dtruss的输出

linux – 了解dtruss的输出

作者:互联网

有人能指点我如何理解/解释dtruss(mac)或dtrace输出的报告吗?

我刚试过一个简单的程序.例如,我得到以下输出:

PID/THRD  SYSCALL(args)          = return
250/0x103c:  getattrlist("/Volumes/CORE/CORE.app\0", 0x7FFF5E8045D8, 0x7FFF5E804250)         = 0 0
250/0x103c:  geteuid(0x7FFF5E8045E0, 0x0, 0x7FFF5E804A18)        = 501 0
250/0x103c:  geteuid(0x7FFF5E805DF0, 0x0, 0x7FFF5E805E80)        = 501 0
250/0x103c:  geteuid(0x7FFF5E805540, 0x0, 0x7FFF5E805770)        = 501 0
250/0x103c:  getattrlist("/.vol/16777224/21\0", 0x7FFF5E8046D0, 0x7FFF5E803CF0)      = 0 0
250/0x103c:  geteuid(0x7FFF5E805950, 0x0, 0x7FFF5E8059C8)        = 501 0
250/0x103c:  __mac_syscall(0x7FFF8D22057C, 0x50, 0x7FFF5E805990)         = 0 0
250/0x103c:  geteuid(0x7FFF5E805950, 0x0, 0x7FFF5E8059C8)        = 501 0
250/0x103c:  __mac_syscall(0x7FFF8D22057C, 0x51, 0x7FFF5E8059A8)         = -1 Err#30
250/0x103c:  geteuid(0x7FFF5E8057D0, 0x0, 0x7FFF5E805848)        = 501 0
250/0x103c:  getattrlist("/.vol/16777224/21\0", 0x7FFF5E804960, 0x7FFF5E803F80)      = 0 0
250/0x103c:  open("/.vol/16777224/21\0", 0x0, 0x1FF)         = 6 0
250/0x103c:  geteuid(0x7FFF5E805790, 0x0, 0x7FFF5E805920)        = 501 0

我可以看到所有这些系统调用采用十六进制参数.但我怎么解码这些呢?例如,如何找出实际尝试打开的文件?

解决方法:

您的示例输出确实显示了open()系统调用(“/.vol/16777224/21”)的路径名.

dtruss是一个shell / DTrace脚本,类似于Solaris中的truss工具(Linux上的strace).编码这些工具以了解如何以人类可读的方式显示参数.我在dtruss工具中对其中的一些进行了编码,但可以对其进行改进以了解更多信息.你可以制作一个dtruss的副本并自定义它以添加一些,因为它是一个shell / DTrace脚本.

对于显示十六进制数的系统调用,您可以从阅读手册页开始查看参数是什么.例如,geteuid()没有参数,因此dtruss打印3的默认行为为十六进制令人困惑.它应该打印无,并显示返回值.例如,可以通过更改以下部分来完成此操作:

 /* print 0 arg output */
 syscall::*fork:return
 /self->start/
 {

至:

 /* print 0 arg output */
 syscall::*fork:return,
 syscall::geteuid:return
 /self->start/
 {

标签:linux,system-calls,macos,dtrace
来源: https://codeday.me/bug/20190620/1247163.html