VMWare GDB stub을 이용한 BitVisor 디버깅
Intel CPU, Linux의 VMware workstation에서 실험했는데 AMD, Windows, VMWare Fusion 등도 같은 일을 할 수 있을 것 같다.
설정
다음은 VM의 설정 파일
<VMの名前>.vmx
에 설명되어 있습니다.debugStub.listen.guest64 = "TRUE"
debugStub.hideBreakpoints = "TRUE"
debugStub.port.guest64 = "33333"
vhv.enable = "TRUE"
첫 줄에 64비트 모드의 디버깅을 지정했습니다. 다음 줄에 HW 인터럽트를 사용하도록 설정했습니다. 페이지 테이블에 많은 변화가 있기 때문에 HW 인터럽트가 아니면 원활하게 작동할 수 없습니다.포트 번호를 적절하게 설정하십시오. 마지막은nested virtualization 유효성 설정입니다.
GDB의 실행
VM이 시작된 후1,
gdb -ex "target remote localhost:33333"
처럼 gdb2를 연결합니다.symbol-file
명령bitvisor.elf
, directory
명령이 BitVisor의 원본 디렉터리를 지정하면 gdb에서 BitVisor의 기호를 해결할 수 있습니다.여기는dbgsh를 실행할 때
dbgsh()
라고 불리며 단점을 설정합니다.손님에게dbgsh를 실행하면 인터럽트에 걸려서 gdb로 이동하는 것을 제어할 수 있습니다.
그리고 보통 gdb로 디버깅을 합니다.
dbgsh의 움직임을 쫓아다니며 설명하려고 했는데 힘들어 보인다는 생각에 포기했다. 마음에 드는 사람은 따라해보자. VMMCALL 레지스터에서 열심히 처리한다.
continue
면 방문객 측에 1문자를 입력할 때마다 VMMCALL이 여러 차례 발행돼 처리된다.동작의
이 GDB stub은 어떻게 작동할까요?
VMWare가 L1(BitVisor)과 VMENTRY가 L2(BitVisor에 게스트)에 있을 때 디버깅 레지스터의 설정을 바꾸면 VMENTRY만 있거나 손님만 디버깅을 할 수 있지만 그렇지 않을 수도 있습니다.이 경우 손님 리눅스가 설정한 인터럽트를 이용한 주소도 #BP가 발생합니다.
이러면 좀 귀찮아요. BitVisor가 이용하는 0x40000000-0x4FFFFFFFF의 주소 공간은 리눅스에서 사용자 공간의 주소이고 64bit 환경이라면 충돌이 없겠죠.
겸사겸사 말씀드리겠습니다.
사용 종료
detach
. 실수q
KILL 시 VM 이상 종료 후 최악의 경우 2회 부팅이 불가능한 비극이 발생할 수 있습니다.이번에는 vCPU 수 1로 실행됩니다. 물론 BitVisor가 시작됩니다. ↩
사용https://github.com/cyrus-and/gdb-dashboard
Reference
이 문제에 관하여(VMWare GDB stub을 이용한 BitVisor 디버깅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mmi/items/d3ddb0ca468a7c5e6337텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)