본문 바로가기
개발 및 운영

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
  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

댓글