PE Executable Struktur
-
Hallo,
folgende Frage:
Ich habe zwei kleine Programme, die eigentlich garnichts machen.
Programm1 ist in C++ geschrieben, Programm2 in Assembler.Wenn ich Programm2 im Debugger (OllyDbg) anschaue, finde ich eben nur das was ich auch geschrieben habe.
Wenn ich aber Programm1 anschaue, finde ich unter meinen Anweisungen noch viele andere Anweisungen. Da sind dann Funktionsaufrufe wie "GetSystemTimeAsFileTime", "GetTickCount", "QueryPerformanceCounter" und viele andere.
Ich denke mal, dass es sich dabei um eine Art Prolog handelt, da ich diese Aufrufe auch in anderen Programmen finde.Kann mir das jemand erklären?
Danke...
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x, bzw. C++11) in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Benutzername232132 schrieb:
folgende Frage:
Ich habe zwei kleine Programme, die eigentlich garnichts machen./closed
-
Störenfried schrieb:
Benutzername232132 schrieb:
folgende Frage:
Ich habe zwei kleine Programme, die eigentlich garnichts machen./closed
Hab ich etwas falsches gesagt?
-
Nö, ich bin nur grad sauer auf die Welt.
-
Kommt da noch etwas sinnvolles?
folgende Frage:
Ich habe zwei kleine Programme, die eigentlich garnichts machen.Was ist daran so schlimm, dass ich keine Antwort bekomme?
-
Die Runtime wird initialisiert, Exception-Handling wird vorbereitet etc.
Wenn du mal die Binary uppst kann ich dir mehr sagen.
-
Klar, hier der Upload.
Ist aber eigentlich nicht nötig.#include <Windows.h> int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){ return 1; }
Das ist alles, kompiliert @Visual Studio, Win7. Die Aufrufe von MSVCR betreffen ja die C++ Runtime, das ist mir klar, aber OllyDbg gibt mir z.B.
kernel32.GetCurrentProcessId kernel32.GetCurrentThreadId kernel32.GetTickCount kernel32.QueryPerformanceCounter kernel32.IsDebuggerPresent kernel32.TerminateProcess
Nun würde ich eben gerne wissen, was da passiert, weil es ja sehr "Windowsspezifisch" aussieht.
-
Die Funktionen hängen praktisch alle mit dem Security-Cookie zusammen.
Zum Cookie: http://uninformed.org/index.cgi?v=7&a=2&p=7TerminateProcess wird bei Mismatch aufgerufen.
Und so wird es zusammengebaut:
GetSystemTimeAsFileTime(&SystemTimeAsFileTime); v1 = GetCurrentProcessId() ^ SystemTimeAsFileTime.dwLowDateTime ^ SystemTimeAsFileTime.dwHighDateTime; v2 = GetCurrentThreadId() ^ v1; v3 = GetTickCount() ^ v2; QueryPerformanceCounter(&PerformanceCount); v4 = PerformanceCount.LowPart ^ PerformanceCount.HighPart ^ v3;
Der Cookie wird nach ein paar Checks auf v4 gesetzt.
-
Ah...das erklärt doch einiges aber:
Habe gerade festgestellt dass wenn ich bei meinem Projekt einen Einstiegspunkt in den Projekteigenschaften manuell festlege, dieser ganze "unnötige Quatsch" weg ist, und meine Exe von 32kb auf 2bk schrumpft. Auch die ganzen DLL-Abhängigkeiten sind weg (habe mit "Dependency Walker" nachgeschaut).
Wie kommt das?
Die ganzen Aufrufe sind doch nicht nötig, um automatisch den Einstiegspunkt zu finden