【发布时间】:2016-07-02 05:54:29
【问题描述】:
我正在尝试将 SO 注入到使用 systemd init 系统(使用 LD_PRELOAD)开始的进程中,但它没有加载到新进程中。
我遵守了一个基本的 SO (unrandom.c):
int rand(){
return 42; //the most random number in the universe
}
使用命令行:
gcc -shared -fPIC unrandom.c -o unrandom.so
我将 .service 文件更改为包括:
Environment="LD_PRELOAD=/tmp/unrandom.so"
启动服务后进程中存在LD_PRELOAD环境变量,但没有注入SO
cat /proc/<PID>/maps
我错过了什么吗?
我的机器是 RHEL7
【问题讨论】:
-
如果你从 shell 中运行它会起作用吗?
-
是的,如果我直接从 shell 运行命令,它正在工作......
-
我需要测试一下。晚上可以给你反馈。顺便说一句,奇怪的想法! :) 请问你为什么要这样做?
-
并不是一个奇怪的想法,我发现自己也在尝试做同样的事情,因为有一个错误解决方法:bugs.launchpad.net/ubuntu/+source/libpam-ldap/+bug/1418265
-
systemd启动的流程是什么?它是静态链接还是动态链接(检查
ldd /path/filename),还是脚本(检查head -1 /path/filename)还是将删除其LD_PRELOAD 的suid 程序?
标签: linux rhel systemd ld-preload