LD_PRELOAD,bash和printf

时间:2011-10-27 07:44:27

标签: c linux ld-preload

我有一个共享对象,通过属性为init执行一些printf();很简单。它只是告诉我我设置的一些变量。

当我LD_PRELOAD=mylib.so ./program.sh -flags program.sh吐出由于printfs引起的错误时:

./program_run: line 16: cd: mylib.so: Startup
.: File name too long
./program_run: line 18: test: too many arguments

然后程序正常启动。在查看变量时,看起来bash脚本已被printf()损坏。

有解决方法吗?

2 个答案:

答案 0 :(得分:0)

尝试进行此更改:

export LD_PRELOAD=mylib.so ; ./program.sh -flags

你printf()是否使用变量参数?

答案 1 :(得分:0)

试试这个:

LD_PRELOAD=./mylib.so ./program.sh -flags

注意mylib.so前面的路径

我的经验是,使用完整路径更好,例如

LD_PRELOAD=/home/source/mylib/mylib.so ./program.sh -flags

如上所述,小心使用出口。

它可能会导致各种意外问题。