Друзья, я пытаюсь отследить полное выполнение операционной системы, включая процессы, выполняющиеся поверх нее. Для этого мне нужны инструкции, выполняемые каждым процессом, и его трассировка выполнения, и я хочу сделать это без необходимости брать objdump каждого процесса.
Итак, мои цели:
1) Построение адресного пространства каждого pid.
2) Отслеживание выполнения каждого pid.
Для достижения вышеуказанных целей я запускаю операционную систему на основе Linux поверх эмулятора Qemu.
Когда qemu впервые встречает инструкцию, я проверяю pid процесса, выполняющего эту инструкцию, используя io-порт или известный адрес физической памяти в гостевой системе. Затем я могу использовать эту информацию, чтобы делать то, что хочу.
Моя проблема ... где в файле kernel / sched.c я могу узнать pid процесса, который будет выполняться следующим. Означает, что я не могу понять вызов функции, такой как -> launch_process (pid). Может кто-нибудь указать мне на это место в ядре. Или есть известное место в системе, где мы можем отслеживать адресное пространство. Один из них - CR3, но я действительно не могу ему доверять.
Некоторым ребятам это может показаться банальным указателем на это место, но я не могу найти это место сам.