Друзья, я работаю над внутренним архитектурным симулятором, который используется для имитации эффекта синхронизации кода, работающего с различными архитектурными параметрами, такими как ядро, иерархия памяти и межсоединения.
Я работаю надмодуль берет фактическую трассировку работающей программы из эмулятора, такого как «PinTool» и «qemu-linux-user», и передает эту трассировку в симулятор.
До сих пор мой подход был таким: 1) взятьobjdump двоичного исполняемого файла и проанализируйте эту информацию.2) Теперь эмулятор должен просто передать мне указатель инструкции и другую информацию, такую как адрес загрузки / адрес магазина.
Такие подходы работают, только если известно содержание программы.
Носейчас я пытаюсь отследить исполняемый файл, работающий поверх стандартного ядра Linux.Проблема в том, что базовый образ ядра не содержит код для LKM (загружаемых модулей ядра).Также демоны не известны при запуске ядра.
Итак, мой подход к этому решению: 1) использовать qemu для эмуляции машины.2) Когда инструкция встречается в первый раз, я проанализирую ее и сохраню эту информацию.Для последующего.3) создать вспомогательную функцию, которая отправляет адрес ip, load / store при выполнении инструкции.
Я застрял на шаге 2.Как я могу отличить разные процессы от qemu, который является просто эмулятором и ничего не знает о гостевой ОС ??
Я могу изменить планировщик гостевой ОС, но я действительно не могу понятьпуть вперед.
Извините, если вопрос очень длинный.Я знаю, что мог бы абстрагировать какую-то часть, но чувствовал, что некоторая ее часть дает объяснение контекста проблемы.