qemu仿真可执行二进制文件时出现错误:/lib/ld-uClibc.so.0: No such file or directory的解决方法
在进行固件的可执行开源组件仿真实验时,遇到了一些小的问题。
(1)/lib/ld-uClibc.so.0: No such file or directory
(2)Error while loading XXX No such file or directory
于是搜了一下,在看雪论文中查到了同样的问题。https://bbs.pediy.com/thread-247302.htm
再来看一下我所执行的情况:
测试的busybox所在的文件目录:
/home/ubuntu/zgd/firmwareExtracted/Zyxel/_94018be529bd8c14faf3d12226e230dec68a72ae.zip.extracted/_V310_1.00AABT.2C0.img.extracted/squashfs-root
上面这个图说明什么意思呢?
第一个红色框线内,是我把qemu放在了和要被仿真的busybox的同一级目录下,发现出现了/lib/ld-uClibc.so.0: No such file or directory错误。
第二个红色框线内,是我把qemu放在了busybox的上一级目录下,也就是squashfs-root目录下面,发现仿真成功。
第三个红色框线内,是我把qemu放在了squashfs-root的上一级目录下,发现依然是出现了/lib/ld-uClibc.so.0: No such file or directory错误。
那么我就试图尝试一下,将qemu放在其他的文件夹下,然后指定busybox所在的目录,发现出现文件加载错误,也就是说将qemu和仿真的二进制文件放在不相关的目录(不在squashfs-root目录下)下是不行的。
出现错误:
Error while loading /home/ubuntu/zgd/firmwareExtracted/Zyxel/_94018be529bd8c14faf3d12226e230dec68a72ae.zip.extracted/_V310_1.00AABT.2C0.img.extracted/squashfs-root/bin/busybox: No such file or directory
接着我又做了一个很弱智的尝试,将要仿真的那个组件busybox拷贝到其他目录下,将qemu和busybox放在同一目录下,然后再次进行仿真发现依旧是出现/lib/ld-uClibc.so.0: No such file or directory错误。
总结一下:qemu仿真二进制文件的时候,仿真需要依赖squashfs-root下的环境,可能依赖其他的库文件等情况。所以仿真的时候需要将qemu放在squashfs-root文件夹下。使用chroot指定当前文件夹为根目录运行相关的命令。
可执行二进制文件仿真步骤简单来说就是:(1)查找开源组件的架构、32-bit或64-bit、大小端等信息。(2)根据(1)的信息选择对应的qemu类型。(3)将选择的qemu拷贝到要仿真固件的squashfs-root目录下。在squashfs-root目录下执行命令cp `which qemu-mipsel-static` ./。(4)使用chroot进行仿真命令执行,如sudo chroot ./qemu-mipsel-static bin/busybox。
博主初涉可执行文件的仿真,如进入误区,请留言指导,谢谢!不喜勿喷!