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