사용자 프로그램의 실행을 추적하기 위해 QEMU 에뮬레이터를 사용하고 있습니다. 실행 된 모든 명령어의 IP를 출력하는 도우미 기능을 추가했습니다. 우리는 prime-number 프로그램의 두 가지 변종 (이 중 하나는 C, 다른 하나는 Java)에 대해이 도구의 작동을 테스트했습니다. 우리는 각 프로그램에 대해 4 가지 입력 인수를 시도했는데, 각 경우마다 다른 수의 명령어가 실행될 것으로 예상했습니다. 소수 버전 프로그램의 C 버전은 기대되는 선형 추세 즉, 더 큰 입력에 따라 라인 수가 증가한다. 그러나 Java 프로그램은 매번 동일한 수의 명령어를 제공합니다.Java로 Qemu 사용자 에뮬레이션
Java 실행 추적은 실행중인 실제 코드가 아니라 JVM 코드 만 캡처한다고 생각합니다.
JVM에서 수정 한 코드는 QEMU에서 어디에서 실행됩니까? QEMU가 자체 수정 코드의 실행을 캡처하는 특별한 방법이 있습니까?
계량화 된 QEMU의 개요를 설명해 주시겠습니까? (과거에는 비슷한 것을 시도했지만 첫 번째 시도에서는 모든 IP가 아닌 QEMU의 번역 블록 각각의 첫 번째 IP 만 수집했습니다.) 또한 네이티브 하드웨어로 프로그램을 실행 한 경우 Java 프로그램 예상되는 선형 감속을 보여 줍니까? – davidg
Qemu는 동적 변환 메커니즘을 사용합니다. 게스트 블록을 기본 블록으로 변환하여 코드 캐시에 보관합니다. 번역 파트에 추적 메커니즘을 추가하지 마십시오. 대신 각 명령어에 대해 호출되는 도우미 함수를 생성하십시오. 도우미 함수는 각 명령어의 실행 중에 호출됩니다 –