2013-01-26 2 views
2

QEMU에서 실행중인 가상 시스템의 프로세서 레지스터 및 특정 메모리 주소에 어떻게 쓰나요?QEMU 게스트 시스템에 레지스터 및 메모리에 기록 하시겠습니까?

내 욕망은 QEMU 외부에서 실행중인 사용자 공간 프로그램에서이를 수행하는 것입니다. 이것은 인터럽트를 유도하고 프로세서 및 가상 하드웨어의 실행을 정교하게 제어하는 ​​것입니다.

QEMU Monitor이 매개 변수를 읽거나 마우스 나 키보드 이벤트의 간단한를 분사 할 예정이다,하지만 난 쓰기에 대해 아무것도 보지 못했다.

답변

1

QEMU 모니터 내의 GDB 서버가 귀하의 목적에 가장 적합한 것 같습니다. 귀하의 옵션 중 하나는 gdbprotocol을 구현하고, 다른 하나는 명령 행을 통해 gdb을 구동합니다.

내가 조금 테스트를했습니다, 부착 읽고 메모리 (내가 무엇을 쓰기 읽기) 작동하는 것 같다 쓰는; 다른 주소로 점프하는 것도 효과가있는 것 같습니다. (만약 당신이 코드 call 주입 수 있습니다, 당신은 이론적으로 아무것도 할 수 있습니다). 텍스트 모드 비디오 메모리에 쓰기 은 작동하지 않습니다. (필자가 작성한 내용을 읽지도 않고 표시가 변경되지 않습니다.)

+0

qemu 내의 * guest * 시스템은 무엇이든 될 수 있습니다. gdb 서버를 테스트했을 때, (1)'grub' 부트 로더가 메뉴를 표시하고, (2)'memtest '로, (3) freeDOS 용 리얼 모드 부트 로더로 (실제 모드에서 깨지지 않도록)). –

+0

처음에 대상 시스템이 Unix 또는 Linux 시스템이어야하는지는 알 수 없었지만 실제로는 그렇지 않습니다. [OS Dev Wiki] (http://wiki.osdev.org/GDB)의 주장에 따르면, 소스 레벨 디버깅은 머신 레벨이 아닌 - 레지스터와 비디오 메모리에 기록 할 수없는 것처럼 보입니다. 네가 한 말. – jeremiah

+0

Anton, 적어도 이것이 올바른 방향으로 나를 가리키고 있다고 생각합니다. [GDB 문서] (http://sourceware.org/gdb/current/onlinedocs/gdb/)를 살펴보고 [OSDev Wiki - QEMU GDB 문서] (http : //wiki.osdev. org/QEMU # GDB-stub). 즉각적인 중단 점을 설정하는 방법을 알려줍니다. – jeremiah