【发布时间】:2021-07-17 16:53:23
【问题描述】:
例如,我想从 LD_PRELOAD 库中获取 argv,假设我们调用
LD_PRELOAD=/path/to/my/fopen ./program input
在我的自定义 fopen 中,我想获得“输入”,因此我的程序的 argv[1](也是 argv[2] 等等)。 是否可以?怎么样?
【问题讨论】:
标签: c arguments ld-preload
例如,我想从 LD_PRELOAD 库中获取 argv,假设我们调用
LD_PRELOAD=/path/to/my/fopen ./program input
在我的自定义 fopen 中,我想获得“输入”,因此我的程序的 argv[1](也是 argv[2] 等等)。 是否可以?怎么样?
【问题讨论】:
标签: c arguments ld-preload
读取整个/proc/self/cmdline 文件。命令行参数用\0分隔。
详情请参阅man proc。
没有 C 标准库或错误处理的 Linux 示例:
#include <unistd.h>
#include <fcntl.h>
#include <linux/limits.h>
int main() {
ssize_t i, n;
char cmdline[ARG_MAX];
int cmdline_fd = open("/proc/self/cmdline", O_RDONLY);
n = read(cmdline_fd, cmdline, sizeof cmdline);
for(i = 0; i < n; ++i)
if(!cmdline[i])
cmdline[i] = ' ';
cmdline[n - 1] = '\n';
write(STDOUT_FILENO, cmdline, n);
return 0;
}
Python版本供参考:
cmdline = open('/proc/self/cmdline', 'r').read().replace('\0', ' ').strip()
print(cmdline)
【讨论】: