Форум: "Основная";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];
ВнизАдрес вызывающего функцию Найти похожие ветки
← →
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 вся ветка
Форум: "Основная";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.042 c