일반적으로 리눅스 커널을 디버깅 할 때 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
arch/x86/boot/compressed/vmlinux:     file format elf64-x86-64
  2 .text         00026820  00000000008e0180  00000000008e0180  008e1180  2**6
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
$ objdump -h arch/x86/boot/bzImage
arch/x86/boot/bzImage:     file format pei-x86-64
  3 .text         00909580  0000000001003e00  0000000001003e00  00003e00  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE위와 같을 때
IMAGE_BASE=$((16#39759000))
IMAGE_TEXT_OFF=$((16#3e00))
FILE_TEXT_ADDR=$((16#8e0180))
printf "add-symbol-file arch/x86/boot/compressed/vmlinux -s .head.text 0x%x -s .text 0x%x" $((IMAGE_BASE + IMAGE_TEXT_OFF)) $((IMAGE_BASE + IMAGE_TEXT_OFF + FILE_TEXT_ADDR))
echo
add-symbol-file arch/x86/boot/compressed/vmlinux -s .head.text 0x3975ce00 -s .text 0x3a03cf80
이런식으로 계산을 해서 넣어줘야 한다.
반응형
    
    
    
  '개발 및 운영' 카테고리의 다른 글
| 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 | 
 
										
									
댓글