본문 바로가기
개발 및 운영

pre-decompress linux kernel 디버깅

by Joseph.Lee 2023. 11. 30.

일반적으로 리눅스 커널을 디버깅 할 때 vmlinux 파일을 사용한다.

그런데 이건 decompressed 상태일 때라 pre-decompress 상태를 디버깅 할 수는 없다.

decompress 과정이나 efi_stub 을 디버깅 하기 위해서 arch/x86/boot/compressed/Makefile 을 수정하여 compressed vmlinux 를 디버깅 가능하게 빌드해야 한다.

적당히 KBUILD_CFLAGS += -g 을 추가해 디버그 심볼을 추가한다.

위와 같이 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

댓글