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