Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.24;
Скачать: CL | DM;

Вниз

DLL   Найти похожие ветки 

 
Wizard ©   (2003-01-11 12:38) [0]

есть 2 DLL (назовем X1, X2), каждая из которых юзает в еще одну DLL(назовем ее Y).
Все это в одном процессе
Вопрос: как узнать, из какой DLL(X1 или X2) вызвана функция, которая находится в Y, и сейчас мы находимся в ней...
исходники X1 И X2 недоступны...


 
Игорь Шевченко ©   (2003-01-11 12:52) [1]

По стеку. GetModuleHandle("x1"), GetModuleHandle("x2").
Допустим, есть функция в Y.DLL

funciton YMyFunc (I : Integer) : Integer; stdcall;
var
Callee : LongInt;
....
begin
asm
push dword ptr [ebp+4]
pop Callee
end;
.....

end;

Переменная Callee содержит адрес вызывающей функции.
После этого:

function DecodeAddress (AAddress : LongInt) : String;
var
Module : THandle;
ModName : array[0..255] of char;
FileName : String;
begin
Module := FindHInstance(Pointer(AAddress));
GetModuleFileName(Module, ModName, SizeOf(ModName));
FileName := ExtractFileName(ModName);

Result := Format("%s+0x%x", [FileName, Integer(Cardinal(AAddress) - Module)]);
end;

В результате получается строка, состоящая из имени файла и смещения в этом файле на место, откуда была вызвана функция YMyFunc;

Если смещение не нужно, то вместо
Result := Format("%s+0x%x", [FileName, Integer(Cardinal(AAddress) - Module)]);
Можно просто поставить
Result := FileName;

С уважением,


 
Wizard ©   (2003-01-11 13:07) [2]

а кол-во аргументов влияет на смещение? (ebp + 4)?


 
Wizard ©   (2003-01-11 13:18) [3]

Спасибо большое за совет...
но еще один вопрос: когда делаешь описанным способом, то могут появиться дополнительные библиотеки.. как раскрутить стек до своей DLL..
С Уважением Wiz.


 
Игорь Шевченко ©   (2003-01-11 14:55) [4]

Количество не влияет.

Для дополнительной раскрутки ищи на www.delphi-jedi.org в разделе JCL unit JCLDebug.pas


 
Набережных С.   (2003-01-11 18:23) [5]

Удалено модератором
Примечание: Offtopic



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

Текущий архив: 2003.02.24;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
3-75796
Anton
2003-02-06 12:10
2003.02.24
Как у dbGrida спуститься на строчку вниз


3-75838
jen_bond
2003-02-07 09:20
2003.02.24
Черезмерное увеличение размеров БД


3-75814
UnderSun
2003-02-05 00:27
2003.02.24
Проблемы с обновлением запроса из др потока (IB 6.5)


1-75911
nikulin
2003-02-14 12:11
2003.02.24
Как получить изображение раб стола???


6-76075
1g0r
2003-01-03 19:09
2003.02.24
Проблема с UDP обменом (API- NMUDP)