首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LD_PRELOAD -壳膨胀故障

LD_PRELOAD -壳膨胀故障
EN

Stack Overflow用户
提问于 2014-04-06 07:16:50
回答 2查看 628关注 0票数 0

我想用LD_PRELOAD调用一些.so文件的可执行文件。但是我有一个问题,bash shell扩展似乎不能在可变展开中工作:

这些是我试图为LD_PRELOAD设置的文件:

代码语言:javascript
复制
nuclear@Korhal:~$ ls speedhack/speedhack*.so
speedhack/speedhack32.so  speedhack/speedhack.so

但是外壳扩展在这里不起作用:

代码语言:javascript
复制
nuclear@Korhal:~$ LD_PRELOAD="speedhack/speedhack*.so" ./my_executable
ERROR: ld.so: object 'speedhack/speedhack*.so' from LD_PRELOAD cannot be preloaded: ignored.

我编写了一个脚本来检查shell变量展开会发生什么:

代码语言:javascript
复制
nuclear@Korhal:~$ cat test.sh 
#!/bin/bash

echo "LD_PRELOAD w/o quotes:"
echo $LD_PRELOAD

echo "LD_PRELOAD with quotes:"
echo "$LD_PRELOAD"

运行它:

代码语言:javascript
复制
nuclear@Korhal:~$ LD_PRELOAD="speedhack/speedhack*.so" ./test.sh
ERROR: ld.so: object 'speedhack/speedhack*.so' from LD_PRELOAD cannot be preloaded: ignored.
LD_PRELOAD w/o quotes:
speedhack/speedhack32.so speedhack/speedhack.so
LD_PRELOAD with quotes:
speedhack/speedhack*.so

但是它变得更复杂了:当从ld.so访问变量时,星号不会被扩展,而在脚本中,只有在回显中没有引号的情况下,它才会展开。正如我所知道的,双引号在变量展开中没有什么区别(echo $VAR应该与echo "$VAR“相同。但是echo '$VAR‘会打印字符串$VAR)

主要问题:如何在变量赋值中强制shell展开,以便LD_PRELOAD保存文件列表?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-06 07:27:18

您可以将文件名放在数组中,并使用该数组展开列表:

代码语言:javascript
复制
FILES=(speedhack/speedhack*.so)
LD_PRELOAD="${FILES[@]}" ./my_executable
票数 2
EN

Stack Overflow用户

发布于 2016-03-22 01:14:00

还可以使用反引号或$()语法将命令的结果复制到命令行。然后使用双引号将所有单词都捕获到同一个变量中。

代码语言:javascript
复制
LD_PRELOAD="$(ls speedhack/speedhack*.so)" ./my_executable
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22891074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档