-
Notifications
You must be signed in to change notification settings - Fork 52
Open
Description
Hello,
Please not that finalization caused an access violation when invoking MemoryFreeLibrary.
All library calls are redirected and well executed.
procedure InstallModule;
begin
if Assigned(ModuleList) or IsDesigntime then Exit;
ModuleList := TKeyRecord<TMemoryModule>.Create;
ModuleMemory := MemoryLoadLibary(ExtractResource('MEMORYMODULE.DLL'));
LoadLibraryMemory := MemoryGetProcAddress(ModuleMemory,'LoadLibraryMemory');
FreeLibraryMemory := MemoryGetProcAddress(ModuleMemory,'FreeLibraryMemory');
OldLoadLibraryA := HookProcedure(@LoadLibraryA,@LoadLibraryAHooked,LoadLibraryAHook);
OldLoadLibraryW := HookProcedure(@LoadLibraryW,@LoadLibraryWHooked,LoadLibraryWHook);
OldLoadLibrary := HookProcedure(@LoadLibrary,@LoadLibraryWHooked,LoadLibraryHook);
OldLoadLibraryExA := HookProcedure(@LoadLibraryExA,@LoadLibraryExAHooked,LoadLibraryExAHook);
OldLoadLibraryExW := HookProcedure(@LoadLibraryExW,@LoadLibraryExWHooked,LoadLibraryExWHook);
OldLoadLibraryEx := HookProcedure(@LoadLibraryEx,@LoadLibraryExWHooked,LoadLibraryExHook);
OldFreeLibrary := HookProcedure(@FreeLibrary,@FreeLibraryHooked,FreeLibraryHook);
UnregisterExpectedMemoryLeak(ModuleMemory);
end;
procedure UnhookModule;
begin
UnhookProcedure(LoadLibraryAHook);
UnhookProcedure(LoadLibraryWHook);
UnhookProcedure(LoadLibraryHook);
UnhookProcedure(LoadLibraryExAHook);
UnhookProcedure(LoadLibraryExWHook);
UnhookProcedure(LoadLibraryExHook);
UnhookProcedure(FreeLibraryHook);
end;
initialization
InstallModule;
finalization
if Assigned(ModuleList) then
begin
UnhookModule;
FreeAndNil(ModuleList);
end;
if Assigned(ModuleMemory) then MemoryFreeLibrary(ModuleMemory);
end.
If the Library not freed than a memory leak will be generated.
Best regards.
pult
Metadata
Metadata
Assignees
Labels
No labels