Друзья, я пытаюсь отслеживать полное выполнение операционной системы, включая процессы, выполняющиеся поверх нее. Для этого я хочу, чтобы инструкции выполнялись каждым процессом и его трассировкой выполнения, и я хочу сделать это без необходимости запускать objdump каждого процесса.pid текущего процесса
Мои цели таковы:
1) Адрес адресного пространства каждого pid.
2) Отслеживание выполнения каждого pid.
Для выполнения вышеуказанных целей, я запускаю операционную систему на основе Linux на эмуляторе Qemu.
Когда qemu встречает инструкцию в первый раз, я проверю pid процесса, выполняющего эту инструкцию, используя io-port или известный физический адрес памяти в гостевой системе. Затем я могу использовать эту информацию, чтобы делать то, что я хочу.
Моя проблема: где в ядре/sched.c можно узнать pid процесса, который будет запущен следующим образом. Значит, я не могу вычислить вызов функции вроде -> launch_process (pid). Если кто-то, пожалуйста, укажите мне это место в ядре. Или есть известное место в системе, где мы можем отслеживать адресное пространство. Один из них - CR3, но я действительно не могу ему доверять.
Для некоторых парней это может показаться тривиальным указателем на это место, но я не могу найти это место самостоятельно.
@droid thanks ... context_switch - это функция, в которой pid процесса, выполняющего изменения. Здесь я намереваюсь поместить код с помощью task_struct next. Есть ли другая точка входа для изменения pid ?? Будет ли этот метод работать и для системы smp? –
Я не так хорошо знаком с ядром, чтобы точно ответить на другие подобные точки входа. Что касается SMP - я думаю, все должно быть в порядке. –