해결된 질문
작성
·
742
0
안녕하세요! 강의도 다시 돌려보고 인터넷도 다 뒤져봐도 커널에서는 gdb로 디버깅을 어떻게 하는지 도저히 모르겠습니다ㅠㅠ
지금까지 이해한 바로는
/usr/src/linux-headers-$(uname -r)/scripts/extract-vmlinux bzImage > vmlinux
를 통해 vmlinux파일 추출하고 gdb ./vmlinux 로 실행한 뒤 target remote localhost:1234 하면 되는 것으로 이해 했는데 아무런 반응이 없습니다... (참고로 현재 pwngdb 사용 중 입니다.)
강사님 예제파일을 보면 보통 c코드, start.sh, rootfs.cpio, bzImage 이렇게 주어지는데 이 파일들로 무엇을 해야 gdb 분석이 가능한가요? 죄송하지만 처음부터 자세하게 설명 부탁드립니다ㅠㅠ
항상 좋은 강의 감사합니다.
답변 3
1
안녕하세요.
일반적인 디버깅 순서는 다음과 같습니다.
start.sh 스크립트를 실행하여 qemu를 실행
터미널을 하나 더 열고, gdb_remote.sh 스크립트 실행
2.2. qemu & gdb 세팅 강의에서 사용하는 gdb_remote.sh 스크립트는 다음과 같습니다.
gdb \
-ex "add-auto-load-safe-path $(pwd)" \
-ex "file vmlinux" \
-ex 'set arch i386:x86-64:intel' \
-ex 'target remote localhost:1234' \
-ex 'break start_kernel' \
-ex 'continue' \
-ex 'disconnect' \
-ex 'set arch i386:x86-64' \
-ex 'target remote localhost:1234' \
gdb 스크립트는 gdb 명령어들을 간단히 사용하기 위해 짜둔 스크립트를 뜻합니다.
스크립트의 주요 내용은, qemu에서 -s 옵션으로 열어 둔 1234 포트에 target remote localhost:1234 gdb 명령을 이용해 remote로 접속하여 디버깅을 진행한다는 것입니다.
또한, pwndbg를 사용하시는 경우, qemu & gdb 세팅 강의에서 시연하는 대로 gdb가 멈춘 뒤, ctrl + c 를 여러 번 입력하여 시그널을 보내주어야 remote가 성공적으로 연결됩니다. (이것은 pwndbg 플러그인의 문제입니다.)
감사합니다.
0
0