0

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

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

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

然后程序正常启动。看起来 bash 脚本在printf()检查变量时被 s 破坏了。

有解决方法吗?

4

2 回答 2

0

尝试这个:

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

注意mylib.so前面的路径

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

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

如上所述小心使用导出。

它可能会导致各种意想不到的问题。

于 2014-01-09T01:31:20.560 回答
0

尝试以下更改:

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

您 printf() 是否使用可变参数?

于 2011-10-27T08:31:39.940 回答