Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

регистр EIP [D7]


Zorrow ©   (2003-11-25 17:22:00) 

Всем привет

Можно ли узнать содержимое регистра eip, не используя GetThreadContext? Напомню, что в блоке asm дельфи не позволяет обратиться к этому регистру.
всем спасибо


Digitman   (2003-11-25 18:21:00) [1]


> вот закончу, выложу в готовые программы


"Вырасту, выучусь, куплю тебе, Папакарло, дюжину новых курточек !"

(с)

))))))))))


MBo   (2003-11-25 18:09:00) [2]

>Dimka Maslov
TMethod, видимо, имеется в виду


Digitman   (2003-11-25 18:07:00) [3]


> Zorrow


по-моему, ты занимаешься ерундой

тебе следовало двигаться в сторону kernel-level-отладчика (!), имеющего кроме всего прочего функц-ть известного дизассемблера DeDe ... все остальные потуги на этом поприще трудно назвать сколь-либо серьезными и оправданными


Dimka Maslov   (2003-11-25 18:01:00) [4]

var
T1, T2: TObject;
begin
T1 := TObject.Create;
T2 := TObject.Create;

а теперь зная адрес TObject.Free определи значения T1 и T2


Zorrow   (2003-11-25 17:58:00) [5]

Эх вы, мастера
долго объяснять, вот закончу, выложу в готовые программы


Dimka Maslov   (2003-11-25 17:58:00) [6]

>Zorrow (25.11.03 17:55) [11]
А если есть несколько экземпляров объектов одного класса?


Digitman   (2003-11-25 17:56:00) [7]


> а в CPU window я что, не могу заглянуть


да какой тебе еще CPU Window ?) ты ж в ран-тайм это собрался делать, для любого метода ! Насколько я понял) ...


Zorrow   (2003-11-25 17:55:00) [8]

>Dimka Maslov
:) уже есть


Dimka Maslov   (2003-11-25 17:53:00) [9]

Нет функции, которая по адресу метода объекта может определить адрес его экземпляра. Все методы объекта - есть обычные процедуры и функции, адреса которых определены после запуска приложения.


Zorrow   (2003-11-25 17:52:00) [10]

>Digitman
почем ты знаешь заранее, СКОЛЬКО инструкций выполнено с момента передачи управления п/программе ?


а в CPU window я что, не могу заглянуть
ну я уже все сделал, спасибо


Zorrow   (2003-11-25 17:50:00) [11]

О, придумал!!!
можно вызвать каую-нибудь функцию изнутри того метода, при этом в стек запишется адрес для возврата, отсюда и будем плясать


Digitman   (2003-11-25 17:48:00) [12]


> отнять число пройденных инструкций


почем ты знаешь заранее, СКОЛЬКО инструкций выполнено с момента передачи управления п/программе ?

кр.того, длина разных инструкций разная ... это м.б. и 1 байт и 10 байт и ...

в общем, если тебя приспичило, см. Dimka Maslov © (25.11.03 17:31) [5]


Zorrow   (2003-11-25 17:39:00) [13]

да ... заметь только - при исполнении каждой очередной маш.инструкции !
Да уж заметил, так это не мешает мне просто от значения, считанного с eip, отнять чило пройденных инструкций.
mov eax, eip
sub eax, Number

Ок объясняю:

Как некогда заметил столь догадливый Digitman, я пишу перехватчик апи - и не простой, а ...нет, не золотой, а в объектном виде.

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


Dimka Maslov   (2003-11-25 17:31:00) [14]

узнать адрес функции можно так:
lea eax, func
где func - имя функции


Digitman   (2003-11-25 17:28:00) [15]


> В регистр EIP заносится текущий исполняемый адрес


да ... заметь только - при исполнении каждойочередной маш.инструкции !


> нужно изнутри функции узнать ее адрес


зачем ?? объясни вразумительно ... возможно, существует иное, гораздо более простое и изящное решение


Zorrow   (2003-11-25 17:26:00) [16]

В регистр EIP заносится текущий исполняемый адрес.
нужно изнутри функции узнать ее адрес.


Dimka Maslov   (2003-11-25 17:24:00) [17]

вопрос а для чего нужно узнавать значение регистра EIP? Оно всё равно изменяется


Digitman   (2003-11-25 17:24:00) [18]

накой он тебе сдался ? можешь пояснить ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо