Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];

Вниз

Как узнать какая программа загрузила мою DLL?   Найти похожие ветки 

 
Alx2   (2002-03-21 08:27) [29]

>Rooman (20.03.02 19:15)
>Но опять же, приведите мне фрагменты исходников
>и докажите/опровергните

Типа, экзамен? :) Если нет возможности самостоятельно посмотреть модуль forms, лови:


constructor TApplication.Create(AOwner: TComponent);
var
P: PChar;
ModuleName: array[0..255] of Char;
begin
inherited Create(AOwner);
FBiDiMode := bdLeftToRight;
FTopMostList := TList.Create;
FWindowHooks := TList.Create;
FHintControl := nil;
FHintWindow := nil;
FHintColor := DefHintColor;
FHintPause := DefHintPause;
FHintShortCuts := True;
FHintShortPause := DefHintShortPause;
FHintHidePause := DefHintHidePause;
FShowHint := False;
FActive := True;
FIcon := TIcon.Create;
FIcon.Handle := LoadIcon(MainInstance, "MAINICON");
FIcon.OnChange := IconChanged;
GetModuleFileName(MainInstance, ModuleName, SizeOf(ModuleName));
OemToAnsi(ModuleName, ModuleName);
P := AnsiStrRScan(ModuleName, "\");
if P <> nil then StrCopy(ModuleName, P + 1);
P := AnsiStrScan(ModuleName, ".");
if P <> nil then P^ := #0;
AnsiLower(ModuleName + 1);
FTitle := ModuleName;
if not IsLibrary then CreateHandle; - Специально на случай DLL
UpdateFormatSettings := True;
UpdateMetricSettings := True;
FShowMainForm := True;
FAllowTesting := True;
FTestLib := 0;
end;


-----------
Т.е. application.exename должен указывать на какой-то путь. Это ясно. Доверие - нулевое, т.к. чтобы поверить в то, что этот путь равен именно пути головного процесса, надо просмотреть исходный код как минимум конструктора Application.
--------------

Не совсем конструктор, вернее, совсем не конструктор (об этом уже было в предыдущих сообщениях)


function TApplication.GetExeName: string;
begin
Result := ParamStr(0);
end;


Остальные твои цитаты ничего нового не дают. Как бы сказал Digitman, и ежу понятно :))

Еще о старте DLL в модуле system:

procedure _StartLib;
asm
{ -> EAX InitTable }
{ EDX Module }
{ ECX InitTLS }
{ [ESP+4] DllProc }
{ [EBP+8] HInst }
{ [EBP+12] Reason }

{ Push some desperately needed registers }

PUSH ECX
PUSH ESI
PUSH EDI

{ Save the current init context into the stackframe of our caller }

MOV ESI,offset InitContext
LEA EDI,[EBP- (type TExcFrame) - (type TInitContext)]
MOV ECX,(type TInitContext)/4
REP MOVSD

{ Setup the current InitContext }

POP InitContext.DLLSaveEDI
POP InitContext.DLLSaveESI
MOV InitContext.DLLSaveEBP,EBP
MOV InitContext.DLLSaveEBX,EBX
MOV InitContext.InitTable,EAX
MOV InitContext.Module,EDX
LEA ECX,[EBP- (type TExcFrame) - (type TInitContext)]
MOV InitContext.OuterContext,ECX
XOR ECX,ECX
CMP dword ptr [EBP+12],0
JNE @@notShutDown
MOV ECX,[EAX].PackageInfoTable.UnitCount
@@notShutDown:
MOV InitContext.InitCount,ECX

CALL SetExceptionHandler

MOV EAX,[EBP+12]
INC EAX
MOV InitContext.DLLInitState,AL
DEC EAX

{ Init any needed TLS }

POP ECX
MOV EDX,[ECX]
MOV InitContext.ExitProcessTLS,EDX
JE @@noTLSproc
CALL dword ptr [ECX+EAX*4]
@@noTLSproc:

{ Call any DllProc }

MOV EDX,[ESP+4]
TEST EDX,EDX
JE @@noDllProc
MOV EAX,[EBP+12]
CALL EDX
@@noDllProc:

{ Set IsLibrary if there was no exe yet }

CMP MainInstance,0
JNE @@haveExe
MOV IsLibrary,1
FNSTCW Default8087CW // save host exe"s FPU preferences

@@haveExe:

MOV EAX,[EBP+12]
DEC EAX
JNE _Halt0
CALL InitUnits //Вот тут и родится Application при использовании модуля Forms :)
RET 4
end;





> Digitman
>если экз-р TApplication создается автоматически
>и безусловно в InitControls() ?
А что, это не так?

>при каких нештатных условиях
>м.б. выполнено условие Application <> nil,

Digitman, по-моему это просто правило хорошего тона. А нештатная ситуация может быть и такой: программа могла заранее похоронить этот Application. Правда, не знаю с какой целью, но это уже другие проблемы :)




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

Форум: "Основная";
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
7-9665
Schummi
2002-01-06 09:27
2002.04.04
*.reg


1-9558
olookin
2002-03-24 16:47
2002.04.04
Сеть


3-9365
amamed_3071
2002-03-09 09:40
2002.04.04
AdoQuery Time Out expected Error


14-9626
Geser
2002-02-22 16:02
2002.04.04
Самый БОЛЬШОЙ проект, которым вы занимались...


1-9474
Varg
2002-03-25 17:07
2002.04.04
Как передать значения параметров в др. процедуру?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский