2013-11-04 2 views
5

필자는 qemu를 처음 접했고 독서 모드 에뮬레이션을 허용한다는 내용을 읽었습니다. 이것은 매주기마다 물리적 램의 일부 주소를 덤프하려고하기 때문에 유용합니다. 불행히도, qemu 문서는 매우 나쁩니다. qemu 모니터에서 단일 단계 모드를 활성화하는 방법을 알고 있지만 모든 단계에서 실행하려는 코드를 어디에 넣어야할지 모릅니다. 누구든지 이것에 대한 정보가 있습니까?QEMU에서 싱글 스텝 모드를 사용하는 방법은 무엇입니까?

+0

@peter의 답이 도움이 되었습니까? – stackoverflowwww

+1

관련 : https://reverseengineering.stackexchange.com/questions/4738/using-qemu-monitor-interface-to-extract-execution-traces-from-a-binary –

답변

0

당신은 QEMU에 ::

--gdb TCP와 게스트에 첨부

옵션을 GDB를 사용하고

$ gdb <binary> 
(gdb) symbol-file <sym file> 
(gdb) target remote <host>:<port number> 
(gdb) b <function> 
(gdb) c 

'B'중단 점을 설정을 사용할 수 있습니다. 'n' 's' 'i'는 코드를 단계별로 수행하는 데 사용할 수 있습니다. GDB 모드에서 "정보"를 입력하면 위의 링크에서

+0

잘 - 절전 모드 - 확실하지 방법 그게 작동합니까? 아마도 gdb가 연결하기위한 각 단계마다 중단 점을 발생시킬 것입니까? –

+0

자세한 QEMU GDB 설정 가이드는 다음과 같습니다. https://stackoverflow.com/a/33203642/895245 –

0

http://www.xenproject.org/help/questions-and-answers/problem-with-vga-passthrough.html

는 QEMU에 대한 singlestep 모드를 입력 할 수있는 명령 줄 옵션이 더 많은 정보를 표시합니다. do_singlestep (모니터 * 월, const를 QDict * qdict)

그냥 단순히 플래그 "singlestep"로 설정 : 다음 QEMU ( http://wiki.qemu.org/Download)

에 대한 함수 monitor.c를 소스 코드를 얻는 것입니다. 하드웨어 singlestep 에뮬레이션을 에뮬레이트하는 "singlestep_enabled"와는 다릅니다.

(전역 변수는 vl.c에 선언되어 있습니다.)

지금 targt-I386/translate.c의 모든 기능을 들여다 - "singlestep"플래그를 테스트입니다 :

if (singlestep) { 
     gen_jmp_im(pc_ptr - dc->cs_base); 
     gen_eob(dc); 
     break; 
    } 

이 바이너리 중 하나를 실행 (또는 "번역"하는 장소입니다 좀 더 정확하게), 그렇지 않으면 하드웨어 예외 발생 및 핸들러 (예 :). 아마 당신이 여기에서 시도 할 수있는 수정하고 싶은 행동이 있다면?

관련 문제