일반적으로 리눅스 커널을 디버깅 할 때 vmlinux 파일을 사용한다.
그런데 이건 decompressed 상태일 때라 pre-decompress 상태를 디버깅 할 수는 없다.
decompress 과정이나 efi_stub 을 디버깅 하기 위해서 arch/x86/boot/compressed/Makefile 을 수정하여 compressed vmlinux 를 디버깅 가능하게 빌드해야 한다.
위와 같이 Makefile 파일 수정 후 bzImage 을 다시 빌드하면 arch/x86/boot/compressed/vmlinux 파일이 디버그 심볼이 포함된 elf 로 빌드된다. 이 파일을 gdb 에서 로드해 사용할 수 있다.
text section 주소 찾기.
$ objdump -h arch/x86/boot/compressed/vmlinux
2 .text 00026877 00000000008bc840 00000000008bc840 008bd840 2**6
CONTENTS, ALLOC, LOAD, READONLY, CODE
위와 같을 때 add-symbol-file arch/x86/boot/compressed/vmlinux (load_addr+0x008bc840)
으로 하면 되는 줄 알았으나 아래와 같이 이상하게 나온다.
실제 값과 비교해보니 0x3c00 만큼 뒤에 있다.
위와 같을 때 add-symbol-file arch/x86/boot/compressed/vmlinux (load_addr+0x008bc840+0x3c00)
으로 로드하면 된다. PE Header 사이즈가 그 쯤 되나보다. 정확한 분석은... 음..
암튼 이제 정상적으로 뜬다.
반응형
'개발 및 운영' 카테고리의 다른 글
dHCI Storage Benchmark (0) | 2024.04.24 |
---|---|
Intel AMT 개발 Summary (0) | 2024.02.03 |
UEFI development with Go-lang (0) | 2023.11.14 |
메일서버 (SMAP/IMAP) 종류 (0) | 2023.02.04 |
[임시] OpenWRT + Active Directory (AD) 구축 (0) | 2022.07.12 |
댓글