Записать динамическую трассировку команд или гистограмму в QEMU? - PullRequest
1 голос
/ 25 сентября 2019

Я написал приложение для Linux и скомпилировал его для RISC-V Linux, поэтому я хотел бы запустить его в QEMU в пользовательском режиме (чтобы изучить приложение в одиночку, без вмешательства ОС) и создать дампвсе динамические инструкции (то есть команды, которые были выполнены во время выполнения, не основанные на анализе исполняемого файла) в файле.

Возможно ли получить хронограмму выполнения инструкции динамической сборки из QEMU?Если да, то как это сделать?Если нет, то есть ли инструменты для поддержки архитектуры RISC-V?

1 Ответ

2 голосов
/ 26 сентября 2019

QEMU в настоящее время не поддерживает такую ​​трассировку всех выполненных инструкций.Самое близкое, что мы имеем сегодня, - это то, что под ключом -d есть различные биты отладки, и вы можете комбинировать отслеживание перевода «команд, переведенных из гостевой системы в нативную», с переводом «блоков выполненного переведенного кода», чтобы выяснить, что быловыполнено, но это довольно неловко.В качестве альтернативы вы можете попробовать написать в сценарии интерфейс gdbstub что-то вроде «инструкции по дизассемблированию на ПК; одиночный шаг», который (медленно!) Даст вам все выполненные инструкции.

Продолжается работа по улучшению способности QEMU анализировать гостя.выполнение, так что вы можете написать простой «плагин» с функциями, которые вызываются для таких событий, как выполнение гостевой инструкции;при этом было бы довольно легко написать дамп выполненных гостевых инструкций (или выполнить более интересную обработку), но это все еще в стадии разработки, поэтому пока недоступно.

...