qemu-arm运行编译的二进制文件

时间:2017-12-03 13:58:18

标签: c arm reverse-engineering qemu firmware

尝试运行已编译的二进制文件我已从qemu上的固件中提取,但是我遇到了这个错误:

root@ubuntu14:~# qemu-arm -L /usr/arm-linux-gnueabi ~/x
/system/bin/linker: No such file or directory

root@ubuntu14:~# file ./x
./x: ELF 32-bit LSB  shared object, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), stripped

我正在使用" -L"旗帜,如下所示: qemu-arm can't run arm compiled binary

但是,这个标志对我来说似乎没有什么不同,设置QEMU_LD_PREFIX

也没有

可能是一些遗漏的依赖项吗?

2 个答案:

答案 0 :(得分:2)

看起来系统无法找到动态链接器(在您的情况下看起来是/system/bin/linker,而不是正常的/lib/ld-linux-armhf.so.3或类似的。

由于我无法访问您的代码,因此我尝试通过安装Raspberry Pi" Raspbian"来重现这一点。我系统上/mnt上的图像。如果我尝试运行/mnt/bin/echo hello,请执行以下操作:

qemu-arm  /mnt/bin/echo hello

我得到了类似的错误:

/lib/ld-linux-armhf.so.3: No such file or directory

我可以像这样提供动态链接器的显式路径:

qemu-arm  /mnt/lib/ld-linux-armhf.so.3 /mnt/bin/echo hello

现在我得到了一个不同的错误:

/mnt/bin/echo: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory

这实际上很棒,因为这是正常的,而且我找不到我的共享库"错误,解决方案是使用LD_LIBRARY_PATH。我们可以在qemu-arm使用-E标志创建的环境中设置此项,而不是在我们的环境中设置此项:

qemu-arm -E LD_LIBRARY_PATH=/mnt/lib/arm-linux-gnueabihf/  /mnt/lib/ld-linux-armhf.so.3 /mnt/bin/echo hello

这让我获得了输出:

hello

我怀疑这两种相同的技术 - 提供链接器的显式路径,并在LD_LIBRARY_PATH中提供显式的库搜索路径 - 可能会帮助你。让我知道它是如何工作的!

答案 1 :(得分:1)

/ system / bin / linker是Android动态链接器,因此您需要一个带有Android动态链接器和动态库的目录,而不是Linux上的目录(这是/ usr / arm-linux-gnueabi将是什么)。您应该能够从固件映像中提取相关文件,我希望。

相关问题