-

OS X Kernel Debugging - 10.10.3


* Parellels는 리커버리 파티션을 이용해서 OS X VM을 설치할수있다.

* VMWARE에서는 앱스토어에서 받을수있는 OS X.app을 드래그해주면 설치할수있다.


커널 디버깅을 하기 위해서는 Debugger와 Debuggee의 OS버전이 같아야하고 KDKs 설치후 nvram 플래그를 설정해주어야한다.

우선 KDKs는 각 OS X 버전 별로 다르므로 애플홈페이지에서 자신의 버전에 맞는 KDKs를 다운받아 설치한다

Kernel Debug Kit(KDK)s Download

설치하면 디버그용 커널이 설치되는데 실제 커널이 있는 디렉토리로 복사해주어야한다


아래 명령어는 10.10.3 기준이다 버전별로 KDKs설치되는 경로가 다르므로 주의! 

sudo  cp  /Library/Developer/KDKs/*/System/Library/Kernels/kernel.development  /System/Library/Kernels/


이때 플래그들은 활성화 시킬 값들을 모두 더한 값으로 설정해준다. (ex : 0x100 + 0x040 + 0x001 = 0x141)

 플래그

 설명

 0x001

 부팅할때 멈춘후 디버거가 attach될때까지 기다린다

 0x002

 커널 디버깅의 출력값을 콘솔로 전송한다

 0x004

 nonmaskable 인터럽트로 디버거를 떨군다(Drop into debugger on a nonmaskable interrupt)

 0x008

 커널 디버깅정보를 시리얼포트로 전송한다

 0x010

 ddb를 기본 디버거로 만든다

 0x020

 진단 루틴 정보(diagnostics information)를 시스템로그에 출력한다

  0x040

 ARP와 route를 통한 디버거를 허용한다

 0x080

 최신(newer) 시스템에 옛날버전의 GDB를 지원하게한다.

 0x100 graphical panic dialog screen표시를 해제



2번 설정을 사용하면 

sudo nvram boot-args="pmuflags=1 debug=0x166 kext-dev-mode=1 kcsuffix=development -v"

sudo kextcache -invalidate

sudo reboot

위의 설정에서는 0x166이란 설정값을 사용했는데 이렇게하면 자세한 디버깅정보를 출력해주면서 크래시나 패닉이 일어났을때 디버거 attach 대기 상태로 넘어가게되어 매번 크래시마다 재부팅할때 디버거를 다시 attach해서 복잡하게 진행하는 귀찮은 일을 조금더 편하게 할수있다

부팅할때부터 디버거를 attach하고싶다면 0x141 플래그를 사용하면 디버깅할때 자세한정보를 출력해주면서 부팅시 디버거 attach 대기상태가된다



해당 플래그를 정상적으로 입력하고 크래시를 내면 waiting for debugger라고 뜨는데. 바로 위에 나타나는 ip를 사용하여 이제는 Host OS에서 lldb의 kdp-remote 명령을 이용해 연결할수있다.


lldb에서

kdp-remote <TARGET_IP>



다른 카테고리의 글 목록

Hack 카테고리의 포스트를 톺아봅니다