gpt4 book ai didi

macos - 为什么在我的 dtruss 跟踪中没有任何 execve 调用?

转载 作者:行者123 更新时间:2023-12-02 00:57:16 27 4
gpt4 key购买 nike

我有一个这样的脚本:

脚本.sh

#!/bin/bash

clang -v

如果我对其执行 dtruss,那么我希望看到对 clangexecve 调用。

$ sudo dtruss -f -a -e ./script.sh 

但是,跟踪不包含 execve。而是出现错误:

...
1703/0x16931: 856 4 0 sigaction(0x15, 0x7FFEE882A3B8, 0x7FFEE882A3F8) = 0 0
1703/0x16931: 858 4 0 sigaction(0x16, 0x7FFEE882A3C8, 0x7FFEE882A408) = 0 0
1703/0x16931: 874 4 0 sigaction(0x2, 0x7FFEE882A3C8, 0x7FFEE882A408) = 0 0
1703/0x16931: 881 4 0 sigaction(0x3, 0x7FFEE882A3C8, 0x7FFEE882A408) = 0 0
1703/0x16931: 883 4 0 sigaction(0x14, 0x7FFEE882A3C8, 0x7FFEE882A408) = 0 0
dtrace: error on enabled probe ID 2149 (ID 280: syscall::execve:return): invalid address (0x7fc2b5502c30) in action #12 at DIF offset 12
1703/0x16932: 2873: 0: 0 fork() = 0 0
1703/0x16932: 2879 138 5 thread_selfid(0x0, 0x0, 0x0) = 92466 0
1703/0x16932: 2958 8 0 issetugid(0x0, 0x0, 0x0) = 0 0
1703/0x16932: 2975 8 1 csrctl(0x0, 0x7FFEEE21DC3C, 0x4) = 0 0
1703/0x16932: 2985 12 6 csops(0x0, 0x0, 0x7FFEEE21E550) = 0 0
1703/0x16932: 3100 13 3 shared_region_check_np(0x7FFEEE21DA98, 0x0, 0x0)
...
  • 是什么导致了这个错误?
  • 如何显示 execve 命令,以便我可以看到调用的程序及其参数?

最佳答案

这意味着 dtruss 在内部使用的 DTrace 脚本正在访问一个无效的内存地址,这是在它试图跟踪 execve 调用时发生的,您很好奇关于。所以基本上,dtruss(或者可能是 DTrace 本身)似乎有一个错误,它会阻止您获得所需的信息。不幸的是,Apple 在保持 DTrace 和依赖于它的工具在 macOS 上正常运行方面并不是最好的:-/。

特别是对于 Bash/shell 脚本,您可以通过在脚本顶部添加 set -x 使其打印它运行的每个命令(更多信息 in this other answer)。

如果您愿意,您也可以尝试直接使用 DTrace —— 这是一个非常简单的单行代码(我自己没有尝试运行它,如果有拼写错误,我们深表歉意):

sudo dtrace -n 'proc:::exec-success /ppid == $target/ { trace(curpsinfo->pr_psargs); }' -c './script.sh'

它的工作方式是:

  • proc:::exec-success:跟踪所有 exec-success系统中的事件,当 exec*-family 系统调用成功返回时,在子进程中触发。
  • /ppid == $target/:过滤器,这意味着仅当父进程的 PID ( ppid) 与 -c< 启动的进程返回的 PID 匹配时才会触发 我们传递给 dtrace 命令的选项 ( $target )。
  • { 跟踪(curpsinfo->pr_psargs); }:这是当事件触发并匹配我们的过滤器时要采取的行动。我们简单地打印 (trace) 传递给进程的参数,这些参数存储在 curpsinfo 中。变量。

(如果失败并出现类似的错误,则该错误可能出在 macOS 某处的 curpsinfo 实现中。)

关于macos - 为什么在我的 dtruss 跟踪中没有任何 execve 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53326939/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com