Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#22

AW: Handle Count erhöht sich

  Alt 28. Jul 2020, 18:34
Das "Handle" einer DLL entspricht aktuell "zufällig" der Adresse im RAM (bei Win32 ... 64 weiß ich nicht)
und so lange die DLL immer an der selben Stelle geladen wird, bleibt sie auch dort.

Außerdem, wenn die DLL beim FreeLibrary nicht freigegeben wird, weil z.B. noch ein anderes Handle drauf zeigt (Referenzzählung), dann lädt das nächste LoadLibrary auch nicht neu und bekommt das aktive Handle.

Statt MSDN-Library durchsuchenLoadLibrary vorher einfach mal mit MSDN-Library durchsuchenGetModulHandle nachsehn, ob die schon/noch da ist.

Jede EXE/DLL hat zwar eine LadeAdresse und würde "eigentlich" auch immer an der Stelle geladen, also hätte somit immer die selbe Adresse/Handle bekommen, ABER
* fast Alle Entwickler vergessen die zu setzen, somit steht die Vorgabe immer auf $00400000, was oft belegt ist (wenn mehrere EXE/DLL die Gleiche haben) und somit verschoben wird
** allerdings hat Windows einen Cache und merkt es sich ... um nicht jedesmal neu die Reallocations neu zu berechnen
** dieser Cache sorgt auch dafür, dass mehrere Instanzen der DLL in verschiedenen Programmen bzw. Programminstanzen (Programm mehrmals gestartet) auch "möglichst" die selbe Adresse haben (gemeinsam genutzter Speicher)
http://docwiki.embarcadero.com/RADSt...e-Basisadresse
* und man kann im Windows auch eine Sicherheitfunktion aktivieren, womit EXE und DLLs immer neu zufällig positioniert werden, damit Hacker/Viren/Trojaner mit statischen Zeigern kein "leichtes" Spiel haben, z.B. durch einen billigen Bufferoverflow im Browser

Zitat:
aber ich lade unterschiedliche DLLs also sollte eigentlich das Handle auch unterschiedlich sein.
so lange die Entwickler keinen Mist gebaut haben ... z.B. überall die gleiche ImageBase
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (28. Jul 2020 um 18:38 Uhr)
  Mit Zitat antworten Zitat