x86_64 Ubuntu에서 QEMU를 사용하여 AARCH64 바이너리 호출 libgps를 에뮬레이션하면 "오류 재배치: 기호를 찾을 수 없음" 오류가 발생합니다.

x86_64 Ubuntu에서 QEMU를 사용하여 AARCH64 바이너리 호출 libgps를 에뮬레이션하면 "오류 재배치: 기호를 찾을 수 없음" 오류가 발생합니다.

게시된 질문과 유사합니다.여기그리고여기. 이름이 붙은 바이너리를 리버스 엔지니어링하고 싶습니다.GPS 로거그러나 GDB로 디버깅하기 전에 QEMU(qemu-aarch64)를 사용하여 간단히 에뮬레이트하고 싶습니다. 왜냐하면 실행하면 file gpslogger먼저 gpslogger: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-aarch64.so.1, not stripped정확한 인터프리터 파일을 다운로드하여 Ubuntu 16.04 /libx86_64 폴더에 붙여넣은 다음 다른 오류가 나타나기 때문입니다. .so그런 다음 AARCH64 아키텍처용 파일을 다운로드하여 Ubuntu 폴더에 붙여 넣었 libgps.so습니다 . 모든 오류가 사라지고 난 뒤에는.so/lib.sono such file or directory

Error relocating /lib/libgps.so: __strdup: symbol not found
Error relocating /lib/libgps.so: __fdelt_chk: symbol not found
Error relocating /lib/libgps.so: __fprintf_chk: symbol not found
Error relocating /lib/libgps.so: __snprintf_chk: symbol not found
Error relocating /lib/libgps.so: __isnan: symbol not found
Error relocating /lib/libgps.so: __syslog_chk: symbol not found
Error relocating /lib/libgps.so: __vsnprintf_chk: symbol not found
Error relocating /lib/libdbus-1.so.3: __snprintf_chk: symbol not found
Error relocating /lib/libdbus-1.so.3: __vsnprintf_chk: symbol not found
Error relocating /lib/libdbus-1.so.3: __strncpy_chk: symbol not found
Error relocating /lib/libdbus-1.so.3: __vfprintf_chk: symbol not found
Error relocating /lib/libdbus-1.so.3: __fprintf_chk: symbol not found
Error relocating /lib/libdbus-1.so.3: __vsprintf_chk: symbol not found
Error relocating /lib/libsystemd.so.0: __sprintf_chk: symbol not found
Error relocating /lib/libsystemd.so.0: reallocarray: symbol not found
Error relocating /lib/libsystemd.so.0: __register_atfork: symbol not found
Error relocating /lib/libsystemd.so.0: __memcpy_chk: symbol not found
Error relocating /lib/libsystemd.so.0: __snprintf_chk: symbol not found
Error relocating /lib/libsystemd.so.0: __vsnprintf_chk: symbol not found
Error relocating /lib/libsystemd.so.0: __strncpy_chk: symbol not found
Error relocating /lib/libsystemd.so.0: __vasprintf_chk: symbol not found
Error relocating /lib/libsystemd.so.0: __open64_2: symbol not found
Error relocating /lib/libsystemd.so.0: __asprintf_chk: symbol not found
Error relocating /lib/libsystemd.so.0: __fprintf_chk: symbol not found
Error relocating /lib/libsystemd.so.0: __ppoll_chk: symbol not found
Error relocating /lib/libsystemd.so.0: fcntl64: symbol not found
Error relocating /lib/libsystemd.so.0: __explicit_bzero_chk: symbol not found
Error relocating /lib/libsystemd.so.0: parse_printf_format: symbol not found
Error relocating /lib/libsystemd.so.0: __openat64_2: symbol not found
Error relocating /lib/libgcrypt.so.20: __memcpy_chk: symbol not found
Error relocating /lib/libgcrypt.so.20: __snprintf_chk: symbol not found
Error relocating /lib/libgcrypt.so.20: __fdelt_chk: symbol not found
Error relocating /lib/libgcrypt.so.20: __vfprintf_chk: symbol not found
Error relocating /lib/libgcrypt.so.20: __memset_chk: symbol not found
Error relocating /lib/libgcrypt.so.20: __fprintf_chk: symbol not found
Error relocating /lib/libgcrypt.so.20: __read_chk: symbol not found
Error relocating /lib/libgcrypt.so.20: __syslog_chk: symbol not found
Error relocating /lib/libgpg-error.so.0: __sprintf_chk: symbol not found
Error relocating /lib/libgpg-error.so.0: __fdelt_chk: symbol not found
Error relocating /lib/libgpg-error.so.0: __vfprintf_chk: symbol not found
Error relocating /lib/libgpg-error.so.0: __memset_chk: symbol not found
Error relocating /lib/libgpg-error.so.0: __fprintf_chk: symbol not found
Error relocating gpslogger: GPSNMEA: symbol not found

마지막 재배치 오류를 제외하고 다른 모든 기능은 에 있어야 한다고 생각합니다 glibc. 그래서 방금 libc-2.32.so파일을 다운로드했습니다.여기AARCH64 아키텍처의 경우 /libUbuntu 폴더에 붙여넣었습니다. 그러나 오류는 사라지지 않습니다. 더 많은 정보가 필요하면 알려주시기 바랍니다. 이 문제와 관련하여 도움을 주시면 감사하겠습니다.

편집하다:

readelf -d gpslogger | grep 'NEEDED'반품:

0x0000000000000001 (NEEDED) Shared library: [libgps.so]

0x0000000000000001 (NEEDED) Shared library: [libc.musl-aarch64.so.1]

가 아닌 libc에서 왔다는 뜻인가요 ?muslglibc

답변1

출력의 "인터프리터"는 /lib/ld-musl-aarch64.so.1musl로 빌드되었음을 의미합니다. 이는 musl 동적 링커( )뿐만 아니라 .filegpsloggerld-musl-aarch64.so.1gpslogger

나열된 누락된 기호는 설치한 라이브러리가 glibc용으로 구축되었음을 나타냅니다.

관련 정보