저는 개인 프로젝트 용 소프트웨어를 테스트하기 위해 QEMU를 사용하고 있으며 프로그램이 메모리에 쓸 때마다 알고 싶습니다. 가장 좋은 해결책은 메모리에 쓰기를 담당하는 파일에 print 문을 수동으로 추가하는 것입니다. QEMU를 작성하고 파일을 다시 작성해야합니다. 하지만 QMP를 통해 JSON 명령을 사용하여 QEMU를 조작했습니다.이 명령의 전체 목록은 https://raw.githubusercontent.com/Xilinx/qemu/master/qmp-commands.hx입니다.
그러나 그걸보고 난 내가 원하는 것을 할 수있는 것을 실제로 보지 못했습니다. 나는 일종의 새로운 프로그래머이고 그다지 진전되지는 않았다. 그리고 더 좋은 방법에 대해 어떻게 생각하는지 누군가가 알고 있는지 궁금해하고있었습니다.메모리에 쓸 때 QEMU/QMP 경고
0
A
답변
0
이전에는 QEMU에서 모든 게스트 메모리 액세스 추적에 대한 지원이 없었습니다. 인쇄 문을 쉽게 추가 할 수있는 곳이 QEMU에 없기 때문입니다. 이것은 더 많은 게스트 메모리 액세스가 데이터 구조 (QEMU의 TLB)에서 호스트 RAM 주소를 조회하고로드 또는 저장을 수행하는 원시 호스트 명령어를 직접 생성하는 "빠른 경로"를 통과하기 때문입니다. 이 빠른 경로가 TLB에서 히트를 찾지 못했을 때만 C로 작성된 느린 경로로 되돌아갑니다.
최근의 추적 이벤트 이벤트 'tcg_guest_mem_before'를 사용하여 가상 메모리 액세스를 추적 할 수 있습니다. (a) 액세스가 성공했는지 또는 실패했는지 (b)로드되거나 저장된 데이터가 (c) 액세스 된 실제 주소인지를 알려주지는 않습니다.
0
최근 (9 월 2016 일)에는 메인 라인 QEMU에 강력한 추적 기능이 추가되었습니다. (QEMU에 기본적으로 컴파일되어 런타임에서 활성화 될 수있는 대부분의 추적 이벤트와 달리 QEMU를 다시 빌드해야합니다. . qemu/docs/tracing.txt 파일을 수동으로 참조하십시오.
그 목록 QEMU/trace_events 파일을 참조 추적 할 수있는 이벤트가 많이 있습니다.
코드를 이해할 수 있으므로 "guest_mem_before"이벤트는 게스트 메모리 쓰기를 표시해야하는 것입니다.
세부 사항 : 다음과 같은 기능에 배치 후크가 추적됩니다
- QEMU/TCG/TCG-op.c : tcg_gen_qemu_st * 모든 게스트를 저장 지침 TCG 세대
- QEMU를 /include/exec/cpu_ldst_template.h 모든 비 -TIC 메모리 액세스 (가져 오기/변환 시간, 도우미, 장치)
죄송합니다. 추적이 주류로 들어간 것을 잊었습니다. 몇 가지 메모 : (1) 추적 이벤트에서 '사용 안 함'으로 표시되어 있으므로 QEMU를 다시 사용하여이를 활성화해야합니다. (2) 시도했지만 컴파일되지 않았습니다. 어쩌면 내가 뭔가 잘못하고있는 것 같아. –