【问题标题】:How to get command line arguments inside LD_PRELOAD library如何在 LD_PRELOAD 库中获取命令行参数
【发布时间】: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


    【解决方案1】:

    读取整个/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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 2013-08-23
      相关资源
      最近更新 更多