首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正在系统中转储数组类型的syscall参数

正在系统中转储数组类型的syscall参数
EN

Stack Overflow用户
提问于 2018-04-13 19:04:57
回答 1查看 229关注 0票数 0

我正在尝试将syscall探测器中的变量转储到系统分路脚本中:

代码语言:javascript
复制
probe syscall.execve
{
  printf("ARGS: %s\n", argstr)
  print($envp)
  print("\n")
}

在systemtap下运行程序后,如下所示

代码语言:javascript
复制
sudo stap -vv -W script.stp -c ./run.sh -o log.txt

我得到了类似于下面的内容(在log.txt中):

代码语言:javascript
复制
ARGS: "some-binary-name", ["arg1", "arg2"], [/* 6 vars */]
140089557153664

不幸的是,我在日志中得到的是[/* 6 vars */]字符串,而不是$envp的实际内容。当我尝试使用print输出$envp时,我得到了一些数值(可能是数组的地址),而不是数组元素。

如何转储存储在$envp中的实际字符串

EN

回答 1

Stack Overflow用户

发布于 2018-04-27 22:12:24

syscall.execve探测器导出env_str脚本变量,在现代系统中(此处为3.2),该变量包含整个环境字符串,最高可达MAXSTRINGLEN限制:

代码语言:javascript
复制
 # stap -e 'probe syscall.execve { println(env_str)}'
 ["XDG_SEAT=seat0", "XDG_SESSION_ID=1", "WINDOWPATH=1", "DISPLAY=:0.0", "SYSTEMTAP_SYNC=1", "TMPDIR=/var/tmp", "HOSTNAME=very.elastic.org", "QTLIB=/usr/lib64/qt-3.3/lib", "COLORTERM=truecolor", "LOGNAME=fche", "MODULESHOME=/usr/share/Modules", "VISUAL=vi", "XORG_RUN_AS_USER_OK=1", "SHELL=/bin/zsh", "SCGCINFO=1", "PATH=/home/fche/bin:/home/fche/bin:/home/fche/bin:/usr/libexec/python2-sphinx:/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/home/fche/bin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/home/fche/bin:/usr/loca

另一种方法是使用env_var函数从当前进程获取特定的环境变量。请参阅man function::env_var

代码语言:javascript
复制
# stap -e 'probe syscall.execve { println(env_var("PATH")) }'
/home/fche/bin:/usr/libexec/python2-sphinx:/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/home/fche/bin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/home/fche/bin:/usr/local/sbin:/usr/sbin:/sbin
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49815551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档