LD_PRELOAD、bash 和 printf

发布于 2024-12-11 21:40:42 字数 432 浏览 0 评论 0原文

我有一个共享对象,它通过 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

话少情深 2024-12-18 21:40:42

试试这个:

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

注意 mylib.so 前面的路径

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

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

小心使用上面提到的导出。

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

Try this:

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

Notice the path in front of mylib.so

My experience has been that it's better to use a full path, eg

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

Careful using export as mentioned above.

It can cause all sorts of unintended problems.

随风而去 2024-12-18 21:40:42

尝试进行以下更改:

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

您 printf() 使用变量参数吗?

Try with this changes:

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

Does you printf() use the variable arguments?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文