如何为ptrace子项设置LD_PRELOAD环境变量

xiaogw

我正在尝试使用环境变量将预加载库加载到ptrace子进程。但是以某种方式在创建子进程时出现错误:

int main(int argc, char **argv)
{
    char *env[] = {"LD_PRELOAD=/<path-to-the-preload-library>/preload.so"};
    pid_t pid = fork();
    switch (pid) {
        case -1: /* error */
            log_fatal("%s. pid -1", strerror(errno));
            break;
        case 0:  /* child, executing the tracee */
            ptrace(PTRACE_TRACEME, 0, 0, 0);
            execve(argv[1], argv + 1, env); // Fail to launch ptrace child!
            //execvp(argv[1], argv + 1);    // It works fine!
            log_fatal("%s. child", strerror(errno));
    }

    waitpid(pid, 0, 0); // sync with PTRACE_TRACEME
    ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_EXITKILL);

简单的预加载库代码:

$ cat preload.c
#include <stdio.h>

static void _init() __attribute__((constructor));
void _init() {
    printf("I'm a constructor\n");
}

知道为什么会失败吗?

内特·艾德雷奇

如果您告诉我们错误消息是什么那就太好了,但是我想我可以猜测:“地址错误”?

就像向量一样,env传递给向量execve需要使用NULL指针终止argv所以你要

char *env[] = {"LD_PRELOAD=/<path-to-the-preload-library>/preload.so", NULL};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何为anacron设置环境变量?

来自分类Dev

如何为anacron设置环境变量?

来自分类Dev

如何为PHP设置环境变量?

来自分类Dev

如何为Xfce窗口环境设置环境变量

来自分类Dev

如何为root设置持久性环境变量?

来自分类Dev

如何为gulp-jasmine设置环境变量

来自分类Dev

如何为Shell命令设置环境变量

来自分类Dev

如何为JVM设置PATH环境变量

来自分类Dev

如何为Enide / Nodeclipse设置环境变量?

来自分类Dev

如何为Linux Shell设置TERM环境变量

来自分类Dev

如何为GitHub存储库设置环境变量?

来自分类Dev

如何为root设置持久性环境变量?

来自分类Dev

如何为远程rsync进程设置环境变量?

来自分类Dev

如何为所有类型的OS设置环境变量?

来自分类Dev

如何为Enide / Nodeclipse设置环境变量?

来自分类Dev

如何为使用`nohup`执行的程序设置环境变量?

来自分类Dev

如何为 Powershell 脚本传入或设置环境变量?

来自分类Dev

如何将LD_PRELOAD设置为进程?

来自分类Dev

如何修复LD_PRELOAD?

来自分类Dev

如何设置环境变量?

来自分类Dev

如何设置环境变量?

来自分类Dev

如何设置环境变量?

来自分类Dev

如何为virtualenvwrapper-win设置环境变量WORKON_HOME

来自分类Dev

如何为Gnome终端仿真器应用程序设置TERM环境变量?

来自分类Dev

如何为boot2docker永久设置环境变量

来自分类Dev

如何为onnx转换设置环境变量TF_Keras = 1?

来自分类Dev

如何为Gnome终端仿真器应用程序设置TERM环境变量?

来自分类Dev

如何为“网络服务”用户设置TEMP环境变量?

来自分类Dev

如何为单个程序一致地设置环境变量?