![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Адрес вызывающего функцию
MultIfleX © (2009-04-24 14:52:00)Имеем в библиотеке stdcall функцию с 4 параметрами (PAnsiChar,Pointer,LongBool,Integer). Нужно узнать с какого адреса осуществолен вызов.
Спасибо.
GrayFace (2009-04-30 10:59:00) [1]проще так:
function RegisterMethod(param1: PAnsiChar; ...);
var addr:^pointer;
begin
addr:= pointer(@param1);
dec(addr);
addr^ - искомый return address
end;
MultIfleX (25.04.09 13:06) [5]
Решил вопрос прочитав PE заголовок модуля.
эти вопросы решают 1-2 функции - см. ShowException (тот, что в SysUtils) в сорсах.
MultIfleX (2009-04-25 13:06:00) [2]Решил вопрос прочитав PE заголовок модуля.
MultIfleX (2009-04-25 12:55:00) [3]Тогда другой вопрос, каким образом можно определить сколько памяти выделено под ДЛЛ при LoadLibrary. В принципе Ptr( LoadLibrary(,,) )-это начальный адрес, как узнать занимаемую область - это проблема. Процесс естессно мой.
MultIfleX (2009-04-25 10:45:00) [4]Вопрос в догонку: как узнать какая библиотека (*.dll) загружена в это адресное пространство? Загружены все по LoadLibrary, т.е. есть Handle. Где-то это описывается? Ну тобишь посмотреть какие библиотеки подцеплены к твоему приложению, и где в памяти распологаются?
MultIfleX (2009-04-24 15:43:00) [5]ага, сделал так:
asm
mov eax, [ebp+$04]
sub eax, $00000002
push eax
mov eax, [ebp+$14]
push eax
mov eax, [ebp+$10]
push eax
mov eax, [ebp+$0C]
push eax
mov eax, [ebp+$08]
push eax
call mrRegisterMethodWithAddr
end;
mrRegisterMethodWithAddr - аналогичная функция с пятым параметром Addr
вродебы работает, хоть и кривовато выглядит.
MBo, спасибо!
MBo (2009-04-24 15:20:00) [6]адрес возврата лежит в стеке перед первым параметром