LD_PRELOAD、bash 和 printf
我有一个共享对象,它通过 init 的 attribute 执行一些 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()
破坏了。
有解决方法吗?
I have a shared object that does some printf()
s via attribute for init; Pretty simple. It just informs me of some variables I have set.
When I do LD_PRELOAD=mylib.so ./program.sh -flags
the program.sh
spits out errors due to the printfs:
./program_run: line 16: cd: mylib.so: Startup
.: File name too long
./program_run: line 18: test: too many arguments
Then the program normally starts up. It looks like the bash script is being corrupted with the printf()
s when it does checking of variables.
Is there a workaround?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
试试这个:
注意 mylib.so 前面的路径
我的经验是最好使用完整路径,例如
小心使用上面提到的导出。
它可能会导致各种意想不到的问题。
Try this:
Notice the path in front of mylib.so
My experience has been that it's better to use a full path, eg
Careful using export as mentioned above.
It can cause all sorts of unintended problems.
尝试进行以下更改:
您 printf() 使用变量参数吗?
Try with this changes:
Does you printf() use the variable arguments?