Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Reihenfolge vom Laden von Modulen

  Alt 23. Jul 2024, 17:26
tdump gibt nur die statischen Imports und vielleicht auch DelayedImports an, von dem einen Modul (EXE).
Du mußt also auch noch alle deine DLLs und BPLs durchgehn.
Und dann auch noch die Hooks im Windows, wo dir auch noch was untergeschoben werden kann. (Maustreiber, Teamviewer, Acrobat, ...)



erstmal "Zufall",

aber grundsätzlich ist es so, dass bei deiner EXE, vor dem eigentlichen Start, die ImportListe durchgegangen wird und dort wird einfach der Liste nach alles geladen (von oben nach unten), beim Laden der einzelnen DLL/BPL dann wiederum (vorher) das, was sie lädt usw.

Die Liste(n) entsteht, beim Linken/Kompilieren, in welcher Reihenfolge es dort eingebunden wurde. (Delphi sortiert da nichts)


Dann vielleicht noch DelayedLoading, was erst beim ersten Aufruf eines Imports geladen wird,
und natürlich das dynamische Laden (LoadLibrary/LoadPackage), was irgendwo mitten in der Ausführung (im Intitialisazionscode oder später im Code) geladen wird.




Ist ähnlich, wie mit deinen Units.
Es geht erst in der DPR/DPK die Liste durch, dann das USES im Interface-Abschnitt der PAS ... da beides in der Reihenfolge der Deklaration
und zum Schluß auch noch das USES im Implementations-Teil ... dort kann Delphi sich frei entscheiden, in welcher Reihenfolge (für dich also zufällig).

Beim Laden einer Unit wird dann wieder dessen USES abgehandelt usw.


Also abgesehn vom Implementations-Uses, kann man die "statischen" Verlinkungen der DLL/BPL mit der Art der Reihenfolge bei den Units vergleichen.
Das Implementations-Uses und die delayed+dynmamischen DLLs und die Hooks, bringen hier bissl Chaos rein, aber sonst ist die Reihenfolge eigentlich fest.



Im Programm gibt es Events, um sich über das Laden von DLL/BPL informieren zu lassen,
bzw. ich hatte mir auch mal aus der PEB die Infos rausgeholt ... da gibt es 3 Listen, wovon eine der Reihenfolge des Ladens enspricht, inkl. einer Angabe "warum" es geladen wurde (statisch, delayed oder dynamisch).
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (23. Jul 2024 um 17:38 Uhr)
  Mit Zitat antworten Zitat