c - LD_PRELOAD 哪个程序是目标

标签 c linux ld-preload start-stop-daemon

有没有办法确定哪个程序是 LD_PRELOAD 的目标程序?

LD_PRELOAD=/path/to/libstuff.so ./stuff <args>

就像在 C/C++ 中构建 libstuff 库以及预加载它时一样,有没有办法确定目标程序是 stuff

如果文件是东西,那么这是一种安全的方法,然后做一些事情,否则就让库消失。

如果不建议这样做

询问的原因是我无法获取

HOME=$WORK_PATH start-stop-daemon --start --chuid servers --quiet --background --nicelevel -1 --pidfile $PIDFILE --make-pidfile --exec $WORK_PATH/program <args>

LD_PRELOAD 一起使用,目标是 program 而不是 start-stop-daemon

我不知道是否允许这样偏离主题(抱歉,以防万一),但如果有人可以帮助我,那也会让我很高兴。

提前致谢。

最佳答案

使用 env 程序运行它,该程序修改环境然后调用 exec:

start-stop-daemon --start --chuid servers --quiet --background --nicelevel -1 --pidfile $PIDFILE --make-pidfile \
   --exec env "LD_PRELOAD=/path/to/libstuff.so" "HOME=$WORK_PATH" "$WORK_PATH/program" <args>

关于c - LD_PRELOAD 哪个程序是目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26184305/

相关文章:

c++ - Visual Studio 生成的二进制文件

c++ - 如何在非网关接口(interface) linux 上检测互联网连接

c - LD_PRELOAD不会影响RTLD_NOW的dlopen()

c - 为什么 malloc 钩子(Hook)对 pthreads 不安全?

c - 查找代码所花费的时间

c - GPS - 速度没有按应有的方式更新 - EM408 & Arduino Mega & GSM

改变变量

linux - Debian 上的守护进程启动(存在于/sbin/service)

linux - 如何向该 bash 脚本添加第三个参数?

c - LD_PRELOAD-ed 共享对象捕获 read(),但不捕获 open()。为什么?