Как дизассемблеры поддерживают значение регистров при анализе объектных файлов? - PullRequest
0 голосов
/ 05 июля 2019

Когда мы анализируем объектные файлы, используя gdb или любой дизассемблер, мы помещаем в него точки останова. В любое время показывает текущее состояние регистров. Там может быть много программ, работающих в фоновом режиме. Каждая из этих программ также будет использовать эти регистры и может изменять их значение.

Как дизассемблер поддерживает значение регистров для нашей программы, когда другие процессы могут постоянно его менять?

1 Ответ

5 голосов
/ 06 июля 2019

дизассемблеры типа objdump -d do not запускают программу и не имеют значений регистров.Все, что у них есть, это машинный код, так что они могут печатать, какие регистры использует каждая инструкция, но не то, какое значение она будет держать при выполнении инструкции.

Любая данная инструкция (например, dec edx) может выполняться несколько разжизнь программы, с несколькими различными значениями для EDX.Очевидно, что вы не можете просто статически напечатать одно значение регистра для инструкции в листинге разборки.


Вы спрашиваете о отладчиках , которыедействительно запускать программу, а также останавливать ее в точках останова или в один шаг.

В многозадачной ОС, такой как Linux, MacOS или Windows, ОС предоставляет системные вызовы для отслеживания другого процесса, например Linux ptrace.Это позволяет GDB вставлять точки останова или одношаговые.И когда целевой процесс останавливается, GDB может использовать ptrace для чтения сохраненного архитектурного состояния (значений регистра).

Выполнение нескольких задач на одном CPU выполняется ОС с помощью переключателей контекста "" ", которые сохраняют состояние регистра для старой задачи и восстанавливают состояние для новой задачи. Каждое задание имеет свое собственное состояние регистра, которое загружается в архитектурные регистры всякий раз, когда оно фактически выполняется.

Это базовый материал по операционным системам, получите учебник или Google некоторые из этих ключевых слов, если хотитеузнать больше.

...