Сохранение контекста процесса означает сохранение каждого регистра
Конечно, вы можете сохранить cs
и eip
.Однако ...
... эти два регистра содержат местоположение (адрес) выполняемой в данный момент инструкции.
Это означает, что эти регистры всегда будут содержатьадрес кода, который сохраняет регистры контекста.
Почему вы хотите хранить эту информацию, когда эти регистры всегда содержат одно и то же значение?
... что делатьВы думаете, что происходит, когда вы восстанавливаете эти регистры?
Поскольку эти два регистра содержат адрес выполняемой в данный момент инструкции, единственный способ «восстановить» эти два регистра - перейти к инструкции, которая сохранила значениярегистра.
Вы попадете в бесконечный цикл ...
Это действительно то, что вы хотите сделать?
Я хочу создать программу, которая сохраняет набор регистров - контекст процесса.
register int *cs asm ("cs");
Теперь это становится очень страшным:
Если вы действительно хотите написать некоторый код, который сохраняетCPВ контексте (например, для ручной реализации механизма try
- catch
в «низкоуровневом» C), вы должны написать полную функцию в ассемблере.
Не пытайтесь писать это, используя встроенную сборкувнутри функций C!
В противном случае вы не знаете, как «скомпилированный» код C будет взаимодействовать с кодом ассемблера;весьма вероятно, что ваша программа не будет работать.