macOS Big Sur에서 홈브류를 통해 설치된 GDB가 elf32-i386 바이너리에서 기호를 로드하지 못합니다.

macOS Big Sur에서 홈브류를 통해 설치된 GDB가 elf32-i386 바이너리에서 기호를 로드하지 못합니다.

나는 예전부터 취미로 커널을 개발하는 작업을 천천히 해왔고, 그동안 GDB와 QEMU를 사용하여 메모리 위치와 레지스터 등을 탐색해 왔습니다. 그러나 최근에 Mac을 지우고 macOS Big Sur의 새로운 복사본을 설치했으며 Mojave의 자체 제작 GDB는 내 커널 바이너리를 제대로 로드할 수 있었지만 Big Sur에서는 다음 오류 정보가 표시됩니다 Reading symbols from ~/Kernel/bin/kernel... I'm sorry, Dave, I can't do that. Symbol format `elf32-i386' unknown.

이 문제의 원인이 무엇인지 모르겠습니다. 저는 홈브루 GDB 10.1에서 기본 버전의 GDB를 사용하고 있습니다. 또한 homebrew에서 i386-elf-gdb를 사용해 보았지만 역시 작동하지 않았습니다. GDB를 직접 컴파일하고 --enable-targets=all과 같은 다양한 구성 옵션을 설정하고 대상을 i686-elf로 설정하려고 시도했지만 아무것도 작동하지 않는 것 같습니다. 내 구성 옵션 중 어느 것도 macOS Any GDB Big에서 활성화되지 않습니다. 소스에서 컴파일되거나 홈브류에서 다운로드된 Sur는 elf32-i386 커널 바이너리를 읽습니다.

답변1

문제가 무엇인지 알아냈고, string.h를 먼저 포함하지 않고 strncmp를 사용하려고 하면 clang이 정말 마음에 들지 않는 것으로 나타났습니다. 또한 gcc는 string.h 없이 elf-bfd.h를 컴파일하는 데 매우 만족합니다. 따라서 GDB가 macOS에서 컴파일되더라도 ELF 코드가 올바르게 컴파일되지 않았기 때문에 ELF 파일 로드를 거부합니다. 수정은 단지 #include <string.h>elf-bfd.h의 상단에 추가하는 것이고 GDB는 ELF 바이너리를 올바르게 로드할 것입니다.

답변2

Macos의 경우 Brew를 사용하는 경우 i386-elf-gdb를 설치하여 사용할 수 있습니다.https://formulae.brew.sh/formula/i386-elf-gdb.

brew install i386-elf-gdb

관련 정보