我试图运行一个 ARM 二进制文件——httpd
它来自 Ubuntu18.04 上的网络摄像头固件。我的电脑是基于 X64_86 的,所以我决定使用 QEMU 虚拟机来运行它。据我所知,QEMU 提供了两种不同的仿真模式,分别是System Mode
和User Mode
. 首先,我尝试了系统模式,二进制可以成功运行。这样做,我可以保证二进制文件很好。
然后我尝试使用User Mode
更简洁和快速的。二进制文件是动态链接的,因此相关博客仍然建议了两种方法。第一个解决方案是将qemu-arm
二进制文件和依赖的动态链接库文件复制到固件的根路径 -squashfs-root
然后使用chroot
类似chroot ./qemu-arm ./usr/sbin/httpd
. 结果也很好。
最后,我尝试使用qemu-arm
with-L
参数来暗示依赖的动态链接库文件的前缀。但是这次不行,也没有报错,几分钟后就被杀掉了。我也尝试过export LD_LIBRARY_PATH = .
并没有解决。我可以提供的一些信息如下。
apple@ubuntu:squashfs-root$ ls
bin dev drivers etc fuzz_in fuzz_out home ldd_cp.sh lib lib64 linuxrc mnt proc qemu-arm qemu-arm-static root sbin start_debug.sh start.sh sys tmp tmpfs usr var www
apple@ubuntu:squashfs-root$ qemu-arm -L . ./usr/sbin/httpd
Killed
apple@ubuntu:squashfs-root$ file ./usr/sbin/httpd
./usr/sbin/httpd: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, stripped
我应该提到的另一个信息是我没有二进制文件的源代码。我尝试使用-g
参数调试二进制文件,gdb-multiarch
但我得到了如下所示的情况。
apple@ubuntu:squashfs-root$ qemu-arm -L . -g 2222 ./usr/sbin/httpd
Killed
apple@ubuntu:squashfs-root$ gdb-multiarch
GNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) set architecture arm
The target architecture is assumed to be arm
(gdb) file ./usr/sbin/httpd
Reading symbols from ./usr/sbin/httpd...(no debugging symbols found)...done.
(gdb) target remote: 2222
: 2222: Connection timed out.
(gdb)
qemu-arm-static
+的方式chroot
可以正常工作,已经过测试。我之所以如此顽固地使用 QEMU 用户模式,-L
是因为这项工作的最终目标是httpd
使用afl-qemu
. 二进制文件应该能够在 QEMU 用户模式下运行是一个先决条件。除了依赖的动态链接库文件之外,我必须遗漏一些东西。任何人都可以帮助我,甚至只是给我一些想法吗?非常感谢!!!
添加:
apple@ubuntu:~$ qemu-arm --version
qemu-arm version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.34)
Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers