Вниз
Скачать: CL | DM;

Адрес вызывающего функцию   Найти похожие ветки 

 
MultIfleX   (2009-04-24 14:52) [0]

Имеем в библиотеке stdcall функцию с 4 параметрами (PAnsiChar,Pointer,LongBool,Integer). Нужно узнать с какого адреса осуществолен вызов.

Спасибо.


 
MBo ©   (2009-04-24 15:20) [1]

адрес возврата лежит в стеке перед первым параметром


 
MultIfleX   (2009-04-24 15:43) [2]

ага, сделал так:

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, спасибо!


 
MultIfleX   (2009-04-25 10:45) [3]

Вопрос в догонку: как узнать какая библиотека (*.dll) загружена в это адресное пространство? Загружены все по LoadLibrary, т.е. есть Handle. Где-то это описывается? Ну тобишь посмотреть какие библиотеки подцеплены к твоему приложению, и где в памяти распологаются?


 
MultIfleX   (2009-04-25 12:55) [4]

Тогда другой вопрос, каким образом можно определить сколько памяти выделено под ДЛЛ при LoadLibrary. В принципе Ptr( LoadLibrary(,,) )-это начальный адрес, как узнать занимаемую область - это проблема. Процесс естессно мой.


 
MultIfleX   (2009-04-25 13:06) [5]

Решил вопрос прочитав PE заголовок модуля.


 
GrayFace ©   (2009-04-30 10:59) [6]

проще так:
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) в сорсах.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.006 c
2-1263855556
@!!ex
2010-01-19 01:59
2010.03.21
TRichEdit как узнать слово под мышкой?


3-1236243330
ford
2009-03-05 11:55
2010.03.21
проблемма с вычиткой BLOB полей из базы данных


2-1264116575
pazitiff
2010-01-22 02:29
2010.03.21
Invalid pointer operation


15-1258960395
desc
2009-11-23 10:13
2010.03.21
Длинные имена файлов


15-1262029116
Kerk
2009-12-28 22:38
2010.03.21
Как такое можно технически объяснить?




   Наверх