qemu-arm 运行 编译好的二进制文件
qemu-arm running compiled binary
尝试 运行 我从 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
也没有什么不同
会不会是缺少了一些依赖?
看起来系统无法找到动态链接器(在您的情况下似乎是 /system/bin/linker
,而不是正常的 /lib/ld-linux-armhf.so.3
或类似的。
由于我无权访问您的代码,我试图通过在我的系统上的 /mnt
上安装 Raspberry Pi "Raspbian" 图像来重现此代码。如果我尝试 运行 /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
这真的很棒,因为这是一个正常的 "I can't find my shared libraries" 错误,解决方案是使用 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
中提供显式库搜索路径——可能会帮助你。让我知道它是如何工作的!
/system/bin/linker 是 Android 动态链接器,因此您需要一个包含 Android 动态链接器和动态库的目录,而不是 Linux 的目录(这是/usr/arm-linux-gnueabi 会)。我希望您应该能够从您的固件映像中提取相关文件。
尝试 运行 我从 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
也没有什么不同会不会是缺少了一些依赖?
看起来系统无法找到动态链接器(在您的情况下似乎是 /system/bin/linker
,而不是正常的 /lib/ld-linux-armhf.so.3
或类似的。
由于我无权访问您的代码,我试图通过在我的系统上的 /mnt
上安装 Raspberry Pi "Raspbian" 图像来重现此代码。如果我尝试 运行 /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
这真的很棒,因为这是一个正常的 "I can't find my shared libraries" 错误,解决方案是使用 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
中提供显式库搜索路径——可能会帮助你。让我知道它是如何工作的!
/system/bin/linker 是 Android 动态链接器,因此您需要一个包含 Android 动态链接器和动态库的目录,而不是 Linux 的目录(这是/usr/arm-linux-gnueabi 会)。我希望您应该能够从您的固件映像中提取相关文件。