簡體   English   中英

使用 Qemu 用戶模式運行 ARM64 二進制文件的問題

[英]Problems with using Qemu user mode to run an ARM64 binary

我正在嘗試使用 Qemu 用戶模式在我的 Kali Linux 機器上運行 ARM64 二進制文件。 這是二進制

~$ file arm_binary
arm_binary: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-aarch64.so.1, Go BuildID=kuiME-kEtOrjYr0NtuSC/F9nT4PAOBdJwNF6rCoCc/7l0D-CmOuZoubD_SqInN/JtxNTIAPCIxt045aNaaC, not stripped

我可以看到它是一個 Go 程序並且是使用musl編譯的,所以我從apt安裝了musl-cross-makemusl:arm64libc6-dev-arm64-crossgcc-aarch64-linux-gnu

但是,每次我嘗試運行它時,都會收到所有這些Error relocating: symbol not found錯誤。

~$ unset LD_LIBRARY_PATH; LD_DEBUG=libs QEMU_STRACE=1 qemu-aarch64-static -L /usr/aarch64-linux-musl/ arm_binary
Error relocating /lib/aarch64-linux-musl/libgps.so: __fdelt_chk: symbol not found180208 writev(2,0x55007ff7a8,0x2) = 81
180208 writev(2,0x55007ff8a8,0x2) = 0

180208 writev(2,0x55007ff788,0x2) = 1
Error relocating /lib/aarch64-linux-musl/libgps.so: __fprintf_chk: symbol not found180208 writev(2,0x55007ff7a8,0x2) = 83
180208 writev(2,0x55007ff8a8,0x2) = 0

180208 writev(2,0x55007ff788,0x2) = 1
Error relocating /lib/aarch64-linux-musl/libgps.so: __snprintf_chk: symbol not found180208 writev(2,0x55007ff7a8,0x2) = 84
180208 writev(2,0x55007ff8a8,0x2) = 0

180208 writev(2,0x55007ff788,0x2) = 1
Error relocating /lib/aarch64-linux-musl/libgps.so: __syslog_chk: symbol not found180208 writev(2,0x55007ff7a8,0x2) = 82
180208 writev(2,0x55007ff8a8,0x2) = 0

還有更多錯誤,但我已經省略了它們。 我有libgps.so和二進制文件無法重新定位的所有其他文件。 有誰知道可能是什么問題?

該錯誤告訴您 libgps.so 需要來自其他某個庫的 __fdelt_chk、__fprintf_chk 等符號,但沒有提供它們。

在這種情況下,谷歌搜索表明那些函數 __fdelt_chk、__fprintf_chk 等應該由 libc 提供(glibc 有它們,musl 可能會提供它們以向后兼容,也可能不會)。 庫 libgps.so 可能與較新或不同版本的 libc 鏈接,而不是 sysroot 中的任何版本。

暫無
暫無

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

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