Я использую эмулятор QEMU для отслеживания выполнения пользовательской программы. Мы добавили вспомогательную функцию, которая печатает IP всех выполненных инструкций. Мы протестировали работу этого инструмента для двух вариантов программы простого номера: один в C и другой на Java. Мы пробовали 4 разных входных аргумента для каждой программы, ожидая различного количества команд, выполняемых в каждом случае. C-версия программы простых чисел следует ожидаемому линейному тренду, т.е. Число строк увеличивается с большими входами. Тем не менее, программа Java дает одинаковое количество инструкций каждый раз.
Я чувствую, что трассировка выполнения Java захватывает только код JVM, а не текущий код, который выполняется.
Где код, измененный JVM, запускается на QEMU? Есть ли какой-либо особый способ QEMU фиксирует выполнение самомодифицирующего кода?