簡體   English   中英

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無法運行arm編譯的二進制文件

但是,此標志對我來說似乎沒有什么不同,設置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

這實際上很棒,因為這是一個正常的“我找不到共享庫”錯誤,解決方案是使用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所在的目錄)。 我希望您應該能夠從固件映像中提取相關文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM