[英]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.