Здравствуйте Дельферы.
Проблема состоит в следующем:
Требуется в программе на Дельфи узнать состояние регистров процессора EIP и CS, с последним проблем нет, но с EIP компилятор говорит "undeclaired identifier".
Ассемблер вставляю так:
asm
mov eax,eip
end;
Заранее благодарен.
Здравствуйте, REVERSE, Вы писали:
REV>Проблема состоит в следующем:
REV>Требуется в программе на Дельфи узнать состояние регистров процессора EIP и CS, с последним проблем нет, но с EIP компилятор говорит "undeclaired identifier".
REV>Ассемблер вставляю так:
REV>REV>asm
REV> mov eax,eip
REV>end;
REV>
Нет, а чего же ты хотел...

Такой команды в системе команд процессора нет.
Но мы будем заниматься мелким хаком, основываясь на том убеждении, что при вызове подпрограмм процессор должен записать в стек адрес возврата, который будет указывать на следующую команду, т.е. нужный нам EIP.
Сказано — сделано. Пишем
procedure TForm1.Button1Click(Sender: TObject);
var
eip: Integer;
begin
// Здесь
asm
call @@1 // процессор поместил в стек указатель на команду pop eax, это ближний (near) вызов
@@1:
pop eax // извлекаем EIP
mov eip, eax // помещаем его в переменную
end;
end;
Рекомендую всё это оттрасировать с использованием окошка CPU (в Дельфи меню View — Debug windows — CPU) для полного понимания процесса и того, как его можно применить.
... << RSDN@Home 1.1 beta 3 >>