Delphi_MemoryModule icon indicating copy to clipboard operation
Delphi_MemoryModule copied to clipboard

Access violation

Open hafedh-trimeche opened this issue 1 year ago • 0 comments

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.

hafedh-trimeche avatar Jun 17 '24 00:06 hafedh-trimeche