我正试图使用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-make和musl:arm64
、libc6-dev-arm64-cross
和gcc-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、__fprint_chk等符号,但没有提供这些符号。
在这种情况下,一点谷歌搜索表明,这些函数__fdelt_chk、__fprint_chk等应该由libc提供(glibc有它们,musl可能提供它们以实现向后兼容性,也可能没有(。库libgps.so可能链接到了一个更新或不同版本的libc,而不是sysroot中的任何版本