【问题标题】:Formatting/printing execve arguments格式化/打印 execve 参数
【发布时间】:2018-12-19 07:34:28
【问题描述】:

我正在尝试从 execve 调用中打印出环境。我通过以下方式捕捉到这一点:

syscall::exec*:entry {
  printf("%i %i %s %s\n", ppid, pid, execname, copyinstr(arg0));
}

但我似乎无法让 dtrace 相信 arg2[0] 是可以打印的。在这种情况下如何获取envp 的内容?

【问题讨论】:

  • 打印像arg2[0] 这样从未出现在代码中的值有点困难。您如何尝试打印arg2[0]
  • 这只是我期望的一个例子。我想通过execve 调用打印环境。如果您觉得混淆,可以忽略 arg2[0] 位。
  • 在实际的exec()调用替换进程之前还是之后?

标签: macos dtrace


【解决方案1】:

这应该可以使用 curpsinfo 内置变量,它的 pr_envp field。但这并不容易,因为它是数组并且 dtrace 不支持循环。可能你可以通过使用著名的newproc.d 脚本来破解它,并将 curpsinfo->pr_argv 替换为 curpsinfo->pr_envp 但你也应该对 count 做一些事情,即这个->argc - 也许将其设置为某个高值?无论如何,请查看this question on serverfault 的回复和讨论。我认为这同样适用于环境变量。

【讨论】:

    猜你喜欢
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    相关资源
    最近更新 更多