일반적으로 리눅스 커널을 디버깅 할 때 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 |
댓글