Einzelnen Beitrag anzeigen

Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#10

AW: Warum ist eine zwittrige EXE möglich?

  Alt 27. Okt 2010, 02:46
Nun eigentlich ist das gar nicht so zwittrig.

Das Einzige, was einen wundern könnte, wäre eben, dass man in einer Exe Funktionen exportieren kann. Dies kann man einfach so erklären - das Portable Executable (PE) Format erlaubt das Exportieren SOWIE was ja eig. klar ist IMPORTIEREN von Funktionen nun einmal für beide Executables (Exe & Dll).

Der Rest:
der LoadLibrary Aufruf >>lädt die Executable (sich selbst) NICHT<<. Er schaut zuerst, ob das zu ladende "Modul" in der Modulliste schon vorhanden ist (Siehe PEB). Falls ja, erhöht es nur den Referenzzähler und liefert das Handle (was eig. mehr die Adresse des gemappten Moduls ist) zurück; mehr nicht! Falls es nicht vorhanden wäre, was ja nicht der Fall ist, da es ausgeführt wird, lädt es die Executable und mappt diese in den Speicherraum des Prozesses.

Interessanter wäre es zu probieren, ne andere Executable per LoadLibrary zu laden!

Ala

Delphi-Quellcode:
program _1;

type
  TProc = procedure(P: Pointer); stdcall;

var
  p: TProc;

begin
  hMod := LoadLibrary( >program _2< );
  p := GetProcAddress( hMod, 'DoBlub' );
  p( NIL );
end.

// ======================================

program _2

procedure DoBlub(P: Pointer); stdcall;
begin
  // ...
  MessageBoxA( 0, 'Ich bin die exportierte Funktion', 'Hoi', 0 );
end;

exports
  DoBlub;

begin
  MessageBoxA( 0, 'Ich wurde geladen', 'Information', 0 );
end.
MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat