AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Warum ist eine zwittrige EXE möglich?

Ein Thema von BrightAngel · begonnen am 26. Okt 2010 · letzter Beitrag vom 27. Okt 2010
Antwort Antwort
BrightAngel

Registriert seit: 13. Mär 2007
130 Beiträge
 
#1

AW: Warum ist eine zwittrige EXE möglich?

  Alt 26. Okt 2010, 22:46
Okay, ich denke, dann werde ich mal dein Tutorial durcharbeiten.
Das heißt im Klartext, dass ich sooft ich die EXE als DLL lade, ich sie auch immer neu in den Speicher lade?!?
Ja gut, dann geht der Sinn wirklich verloren.
Irgendwie sind mir die Strukturen der PE-Dateien und die Speicherverwaltung(Zugriffe, was wird wann wie geladen) noch nicht wirklich klar...
Falls jemand von Euch noch hilfreiche Links oder Literaturvorschläge zu diesem Groß-Thema PE-Dateien, DLL, Speicher, COFF, o.ä. hat (also über google hinaus...), bin offen für Alles.

Zudem würde mich interessieren, ob es bereits ein Tool gibt, welches eine EXE nicht DISASSEMBLIERT, sondern vielmehr als Bytefolgen darstellt und vlt. grafisch einfärbt, um zu zeigen, was PE-Header, Resource, Programmstruktur ist.

Das Sahnehäubchen wäre natürlich das Programm zu starten und Live den dem Programm zugeteilten Speicher visuell (in einem Memo o.ä.) mitverfolgen zu können.

Wenn es sowas noch nicht gibt, dann würde mich persönlich der Ansatz zu so etwas reizen (Also was muss ich mir alles in der Anwendung besorgen, dass so etwas möglich ist).

Verbleibe dankend,

Brighty
Do you have the email of god??? --- I have to tell him that I'm happy to be born!
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#2

AW: Warum ist eine zwittrige EXE möglich?

  Alt 26. Okt 2010, 22:54
Das heißt im Klartext, dass ich sooft ich die EXE als DLL lade, ich sie auch immer neu in den Speicher lade?!?
Zumindest wenn sie tatsächlich als DLL geladen werden soll, was eben ein wenig anders abläuft als das Laden einer EXE.

Irgendwie sind mir die Strukturen der PE-Dateien und die Speicherverwaltung(Zugriffe, was wird wann wie geladen) noch nicht wirklich klar...
Bei Google suchenLuevelsmeyer PE format

Zudem würde mich interessieren, ob es bereits ein Tool gibt, welches eine EXE nicht DISASSEMBLIERT, sondern vielmehr als Bytefolgen darstellt und vlt. grafisch einfärbt, um zu zeigen, was PE-Header, Resource, Programmstruktur ist.
Bei Google suchenPE Explorer und Bei Google suchen010 Editor seien dir wärmstens empfohlen.

Das Sahnehäubchen wäre natürlich das Programm zu starten und Live den dem Programm zugeteilten Speicher visuell (in einem Memo o.ä.) mitverfolgen zu können.
Siehe Bei Google suchenSysinternals (bspw. vmmap). Da gibt es einiges dazu, speziell für die neueren Windowsversionen. Wenn dir reicht den Speicher (des geladenen Programms) zu editieren, nochmals Bei Google suchen010 Editor.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
BrightAngel

Registriert seit: 13. Mär 2007
130 Beiträge
 
#3

AW: Warum ist eine zwittrige EXE möglich?

  Alt 26. Okt 2010, 22:59
Vielen Dank!
Tja, es gibt eben nichts über die netten Leute der DP
Ich glaube, jetzt habe ich genug Lesestoff für langweilige Stunden.

Gute Nacht,

Brighty
Do you have the email of god??? --- I have to tell him that I'm happy to be born!
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

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

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
Alt 27. Okt 2010, 09:03     Erstellt von rayjian
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#6

AW: Warum ist eine zwittrige EXE möglich?

  Alt 27. Okt 2010, 09:54
Interessanter wäre es zu probieren, ne andere Executable per LoadLibrary zu laden!
Und? Probiert? Zufrieden mit dem Ergebnis?
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

AW: Warum ist eine zwittrige EXE möglich?

  Alt 27. Okt 2010, 10:33
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).
Mich erstaunt hingegen auch letzteres, also die Aussage des zweiten Satzes. Eine Exe, die implizit DLL-Funktionen mit sich Huckepack schleppt und diese exportiert und in der gleichen (ausfühbaren) Datei auch wieder importiert, kommt mir nämlich wie ein informationeller Inzest, oder, um mal einen Terminus einer anderen Wissenschaft einzuwerfen, wie eine Selbstbestäubung (oder allgemeiner: -befruchtung), also noch ein Quentchen schlimmer als Inzucht, vor. Daß so etwas möglich gibt, ergibt sich m.E. nicht zwangsläufig aus der Aussage des ersten Satzes.

Geändert von Delphi-Laie (27. Okt 2010 um 14:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#8

AW: Warum ist eine zwittrige EXE möglich?

  Alt 27. Okt 2010, 13:04
informationeller Inzest
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz