Linker manipulieren
-
Weis jemand nach welchen Regeln den Funktionen in Dll's vom linker die Adressen zugeordnet werden.
Sie sind nicht aufsteigend in den Ordinalnummern, Hints oder Alphabetisch (mit und ohne Berücksichtigung der Gros-Kleinschreibung).
Grund für die Frage wir haben eine dll die ist ohne .def erzeugt worden und im Einsatz. Jetzt ist eine Funktion hinzugekommen und die wirft die Reihenfolge der Einsprungadressen durcheinander. Auch eine Sortierung nach den bestehenden Ordinalnummern der alten dll (über Dependency-walker ermittelt) führt zu keinem Ergebniss, da die Adressen der Funktionen sich ändern. Die dll wird über ein .lib file während des compilierens und linkens in die Applikationen eingebunden.
Arbeitsumgebung:
Visual C++ 6.0 Servicepack 4, eingesetzt als C-Compiler.
Im Headerfile steht extern "C"{ bei den Funktionen
Der Name einer Funktion im Dependency walker ist _LHTMMTConfig@4, also keine NameMangling durch C++
Wird die Library mit .def erzeugt ist der Name logischerweise LHTMMTConfigDanke
-
guten tag, ich denke nicht daß es da eine definierte reihenfolge gibt nach der die export sektion angelegt wird. das wird jeder linker so machen wie er es möchte. aber was meinen sie wieso können sie dieselben funktionen nicht mit denselben ordinal werten exportieren?
-
Natürlich kann ich sie mit denselben Ordinalwerten exportieren. aber scheinbar geht er beim Laden über eine .lib Datei nicht nach den Ordinalwerten vor sondern anders. es werden auf jeden Fall andere funktionen angesprungen als gewünscht. Und die Auswahl der Routinen erfolgt scheinbar anhand aufsteigendend in der Sprungtabelle. Es ist fast so als ob er die Ordianalwerte dabei nicht nutzt
-
ich verstehe das problem auch nicht, das ergibt auch gar keinen sinn was du sagst. ne lib datei hat nur stubs die dann die dll funktionen aufrufen nachdem die dll vom windoof loader geladen wurde. das hat ja mit dem auflösen der importe nix zu tun. mach mir mal ein beispiel code zur demonstration, vielen danke