微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用带有 -L 参数的 QEMU 用户模式从 IoT 固件运行 ARM 二进制文件时出现问题

如何解决使用带有 -L 参数的 QEMU 用户模式从 IoT 固件运行 ARM 二进制文件时出现问题

我尝试运行 ARM 二进制文件 - httpd,它来自 Ubuntu18.04 上的网络摄像头固件。我的电脑是基于 X64_86 的,所以我决定使用 QEMU 虚拟机来运行它。据我所知,QEMU 提供了两种不同的模拟模式,分别是 System ModeUser Mode。首先,我尝试了系统模式,二进制文件可以成功运行。通过这样做,我可以保证二进制文件没问题。

然后我尝试使用更简洁和快速User Mode。二进制文件是动态链接的,因此相关博客仍然建议了两种方法。第一种解决方案是将qemu-arm二进制文件和依赖的动态链接文件复制到固件的根路径-squashfs-root,然后使用chroot命令,如chroot ./qemu-arm ./usr/sbin/httpd。结果也很好。

最后,我尝试将 qemu-arm-L 参数一起使用,该参数建议依赖动态链接文件的前缀。但是这次没用,也没报错,几分钟就被kill掉了。我也试过 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 一起使用是因为这项工作的最终目标是使用 httpdafl-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

解决方法

您可以尝试更新新版本的QEMU来实现-L功能。经测试,qemu-4.1.0满足-L功能。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。