我正在尝试将syscall探测器中的变量转储到系统分路脚本中:
probe syscall.execve
{
printf("ARGS: %s\n", argstr)
print($envp)
print("\n")
}在systemtap下运行程序后,如下所示
sudo stap -vv -W script.stp -c ./run.sh -o log.txt我得到了类似于下面的内容(在log.txt中):
ARGS: "some-binary-name", ["arg1", "arg2"], [/* 6 vars */]
140089557153664不幸的是,我在日志中得到的是[/* 6 vars */]字符串,而不是$envp的实际内容。当我尝试使用print输出$envp时,我得到了一些数值(可能是数组的地址),而不是数组元素。
如何转储存储在$envp中的实际字符串
发布于 2018-04-27 22:12:24
syscall.execve探测器导出env_str脚本变量,在现代系统中(此处为3.2),该变量包含整个环境字符串,最高可达MAXSTRINGLEN限制:
# 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
# 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:/sbinhttps://stackoverflow.com/questions/49815551
复制相似问题