Re: Delphi - встроенный ассемблер
От: akasoft Россия  
Дата: 08.09.03 13:56
Оценка: 39 (5)
Здравствуйте, 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 >>
Delphi - встроенный ассемблер
От: REVERSE  
Дата: 07.09.03 18:20
Оценка:
Здравствуйте Дельферы.
Проблема состоит в следующем:
Требуется в программе на Дельфи узнать состояние регистров процессора EIP и CS, с последним проблем нет, но с EIP компилятор говорит "undeclaired identifier".

Ассемблер вставляю так:
asm
   mov eax,eip
end;



Заранее благодарен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.