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。

博主初涉可執行文件的仿真,如進入誤區,請留言指導,謝謝!不喜勿噴!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章