VMWare GDB stub을 이용한 BitVisor 디버깅

2416 단어 BitVisorgdb
개인적으로 요즘 VMWare에서 자주 개발하고 있는데, VMWare에는 GDB stub 기능이 있어서 이걸 해보고 싶어요.
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. 실수qKILL 시 VM 이상 종료 후 최악의 경우 2회 부팅이 불가능한 비극이 발생할 수 있습니다.
이번에는 vCPU 수 1로 실행됩니다. 물론 BitVisor가 시작됩니다.
사용https://github.com/cyrus-and/gdb-dashboard

좋은 웹페이지 즐겨찾기