2010-11-22 15 views

Antwort

1

Die virtuelle Startadresse des Programms wird im Header der ausführbaren Datei aufgezeichnet. Jedes Header-Viewer-Programm, das die Struktur dieser Funktionen versteht, kann sie leicht anzeigen, z. B. HT (http://hte.sf.net/) - um nur eines zu nennen. IDAPro kann etwas ähnliches haben.

0

Wie der Ruf und ret jeder DLL oder EXE-Datei arbeitet

Das tatsächlich auf abhängt, ob es eine DLL oder EXE in Frage.

Wenn der Modullader von Windows das Laden einer DLL beendet, ruft er die Startadresse (bekannt als 'DllMain') der DLL mit dem Parameter DLL_PROCESS_ATTACH auf (siehe the documentation of DllMain). Wenn DllMain 1 zurückgibt, wird der Ladevorgang fortgesetzt.

Allerdings, wenn Sie eine EXE-Datei starten, laicht das System einen neuen Prozess und bildet ntdll.dll in diesem Prozess Adressraum, spawnt dann den Haupt-Thread von NTDLL der Startadresse ausgeführt wird. Dieser Thread führt dann eine weitere Initialisierung durch, lädt die EXE-Datei (sowie alle DLLs, die in seiner Importtabelle aufgelistet sind) und ruft die Funktion auf, die durch die Startadresse der EXE identifiziert wird. Wenn diese Funktion zurückkehrt, ruft NTDLL dann auf, wodurch alle laufenden Threads beendet werden und der Prozess beendet wird.

Dieser EXE-Startvorgang ist möglicherweise mit einem Benutzermodus-Debugger schwierig zu beobachten. Einige Debugger haben Schwierigkeiten, diese frühen Phasen der Prozessinitialisierung zu durchbrechen.

Verwandte Themen