[VC9] Warum werden manche Calls so seltsam übersetzt?
-
Ich bin kein Assembler-Profi, aber um einen etwas besseren Durchblick zu bekommen, hab ich eine einfache DLL von mir disassembelt und eine Sache ist mir aufgefallen:
Normalerweise wird eine Funktion ja so aufgerufen:push ... push ... call Die_Funktion
Bei manchen Funktionen ( unter anderem Direct3DCreate9 ) passiert allerdings Folgendes:
push ... call jump_Direct3DCreate9 ... jump_Direct3DCreate9: call D3D9.dll_Direct3DCreate9
Zuerst wird zum Label gesprungen und dann erst die Funktion in der DLL aufgerufen. Ist aber nicht bei allen Funktionen so. Welchen Sinn hat das?
PS: Tut mir Leid, wenn ich besser im Assembler-Forum hätte posten sollen, aber ich dachte mir, dass es am Compiler ( VC9 ) liegt.
-
Das sind Thunks für Funktionen, die aus DLLs importiert wurden.
-
Hab's mal bei Wikipedia nachgeschlagen, allerdings versteh ich immer noch nicht ganz, wozu Thunks gut sind bzw. warum manche importierte Funktionen sowas brauchen und manche nicht.
-
eine erklärung könnte edit&continue sein, damit man funktionen ändern kann ohne überall die adressen zu suchen.
Eine andere möglichkeit ist, dass es fürs debuggen ist, -> zentrale stelle + breakpoint...???
Oder es ist zum platzspaten da, da im programm die schmalen call instruktionen genutzt werden können und nur an einer stelle eine 4/8 bit adresse/offset vorkommt.
-
Danke, wurst
Klingt plausibel.