Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Unterscheidung verschiedener Exe-Typen (https://www.delphipraxis.net/154535-unterscheidung-verschiedener-exe-typen.html)

implementation 14. Sep 2010 19:33

Betriebssystem: Win 98 / ME,Win 2000,Win XP,Win Vista,Win 7

Unterscheidung verschiedener Exe-Typen
 
Angenommen wir haben nun ein Programm Anwendung.exe.
Und wollen es ausführen.
Woher weiß Windows jetzt, um was für einen Anwendungstypen es sich handelt?
  • nativ
  • .Net
  • Java
Woher weiß Windows, dass es das .Net Framework oder die Java VM starten soll?
Kann man auch irgendwo eigene Typen festlegen?
:gruebel:

mkinzler 14. Sep 2010 21:26

AW: Unterscheidung verschiedener Exe-Typen
 
Java wird anhand der Endung erkannt (.class, .jar)
.Net ist ja eine Exe, die das Framework lädt
Nativ anhand der Endung (.exe, .com)

Satty67 14. Sep 2010 21:46

AW: Unterscheidung verschiedener Exe-Typen
 
Denke das jede EXE im Prinzip das Laden Ihrer Bibliothek selber macht. Delphi mit Laufzeitpackages ja auch.

Windows wird nur den PE-Header? prüfen, ob es eine gültige Executable ist... schon wegen DOS/16/32/64Bit

PS. Ich kann mit einem Byte auch 257 Zustände speichern

Namenloser 14. Sep 2010 22:01

AW: Unterscheidung verschiedener Exe-Typen
 
Für .net gibt es ein spezielles Flag im PE-Header soweit ich weiß. Bei COM, EXE etc. weiß ich nicht, ob es überhaupt eine Unterscheidung gibt. Ich kann meine Exen problemlos in .com umbenennen und ausführen... (wird ja auch von Malware gerne mal gemacht um DAUs in die Irre zu führen).

Reinhard Kern 14. Sep 2010 22:29

AW: Unterscheidung verschiedener Exe-Typen
 
Zitat:

Zitat von Satty67 (Beitrag 1049663)
Denke das jede EXE im Prinzip das Laden Ihrer Bibliothek selber macht.

Kann sie zumindest. Alte Programme für Win16 enthielten einen Stub "Dieses Programm läuft unter Windows" oder so ähnlich, aber dieser Stub war ein echtes DOS-Konsolenprogramm, daher gab es Programme, die sowohl als DOS-Programm als auch als echtes Windows-Programm mit GUI liefen. Auch von MS selber, soweit ich mich erinnern kann, traf das für den Editor und das Backup zu.

Ich bin überzeugt, dass man sowas auch mit anderen Versionen hinkriegen kann, ausreichende Systemkenntnisse vorausgesetzt, so dass man etwa ein Programm schreiben könnte, das mit .NET läuft wenn vorhanden und sonst als Win32-Applikation. Das macht nur niemand, weil man die Software grossenteils 2 x schreiben müsste.

Gruss Reinhard

mkinzler 14. Sep 2010 22:33

AW: Unterscheidung verschiedener Exe-Typen
 
Soetwas wie Fat oder universal binaries unter MacOS bze MacOSX

p80286 15. Sep 2010 09:32

AW: Unterscheidung verschiedener Exe-Typen
 
Zitat:

Zitat von NamenLozer (Beitrag 1049668)
Für .net gibt es ein spezielles Flag im PE-Header soweit ich weiß. Bei COM, EXE etc. weiß ich nicht, ob es überhaupt eine Unterscheidung gibt. Ich kann meine Exen problemlos in .com umbenennen und ausführen... (wird ja auch von Malware gerne mal gemacht um DAUs in die Irre zu führen).

Da gibt es durchaus einen Unterschied. Die .COM Dateien beinhalteten ein Speicherabbild. Die .COM-Datei wurde 1:1 den Speicher geladen, der IP wurde mit einem Wert initialisiert und los gings. Die Exe enthält, wenn man so will, die verschiedenen Bausteine eines Programms, die beim Laden erst zusammen gesetzt werden.

Ausserdem gab es, glaube ich, auch Größenbegrenzungen, eine .Com durfte nur 64K groß sein, aber da bin ich mir nicht sicher.

Gruß
K-H

Namenloser 15. Sep 2010 10:38

AW: Unterscheidung verschiedener Exe-Typen
 
Zitat:

Zitat von p80286 (Beitrag 1049732)
Da gibt es durchaus einen Unterschied. Die .COM Dateien beinhalteten ein Speicherabbild. Die .COM-Datei wurde 1:1 den Speicher geladen, der IP wurde mit einem Wert initialisiert und los gings. Die Exe enthält, wenn man so will, die verschiedenen Bausteine eines Programms, die beim Laden erst zusammen gesetzt werden.

Ausserdem gab es, glaube ich, auch Größenbegrenzungen, eine .Com durfte nur 64K groß sein, aber da bin ich mir nicht sicher.

Ich weiß, dass es diese Unterschiede formal gibt, aber das Betriebssystem scheint sich dafür nicht zu interessieren. Ich kann auch Exen die größer als 64K sind in .com umbenennen und problemlos ausführen. [edit]Ob es umgekehrt auch geht, wieß ich nicht. Müsste ich mal ausprobieren. Allerdings hab ich gerade keine .com zur Hand.[/edit]

himitsu 15. Sep 2010 10:47

AW: Unterscheidung verschiedener Exe-Typen
 
Windows bekommt über die EXE-Header mit, um was es sich handelt und jenachdem werden COM/EXE/DLL/... dann unterschiedlich behandelt.

Warum man ein EXE in 'ne COM umbenennen kann ich auch einfach erklärt werden.
> Der Teil, welcher diese Anwendungen analysiert/startet, ist der Selbe

Dezipaitor 15. Sep 2010 21:22

AW: Unterscheidung verschiedener Exe-Typen
 
Warum kann man eine EXE Datei in COM umbenennen.

Letztendlich gibt Windows die EXE zum Ausführen auch nur an die einzelnen Subsysteme weiter (64,32,16...) und schlägt fehl, wenn keines davon erfolgreich war.

xZise 15. Sep 2010 23:13

AW: Unterscheidung verschiedener Exe-Typen
 
Übrigens gibt es keine java-exen ;) Das sind meistens (native) Programme die einfach die jar starten.

MfG
Fabian

PS: Okay es kann java-exen geben, aber das hat dann nicht mehr mit der JVM zu tun!

p80286 16. Sep 2010 17:37

AW: Unterscheidung verschiedener Exe-Typen
 
Na es ist ja noch viel schlimmer
Man braucht nur eine "Ausführbare Dateiendung" damit der Doppelklick ein Programm startet.
Benenne einfach mal eine beliebige .EXE in .BAT um. Die startet so wie gewohnt.

Gruß
K-H

himitsu 16. Sep 2010 18:09

AW: Unterscheidung verschiedener Exe-Typen
 
Das ist eigentlich egal.

- die BAT läuft mit den selben Rechten, selbst wenn eine EXE drin steckt
- die BAT und die EXE können Dinge am System verändern (solange sie die nötigen Rechte besitzen)
- man weiß, daß bei Beiden (BAT und EXE) verschiedene Dinge passieren können

- im Endefekt kommt es also auf's Selbe raus, egal ob als EXE oder BAT (versteckte EXE)

implementation 16. Sep 2010 18:18

AW: Unterscheidung verschiedener Exe-Typen
 
Zitat:

Zitat von Satty67 (Beitrag 1049663)
Denke das jede EXE im Prinzip das Laden Ihrer Bibliothek selber macht. Delphi mit Laufzeitpackages ja auch.

Ich dachte, .Net-Programme würden erst zur Laufzeit aus der CIL in nativen Maschinencode kompiliert :gruebel:
Dann muss der JIT-Compiler ja schon geladen sein, sonst kann die EXE ja nichts tun.
Zitat:

Windows wird nur den PE-Header? prüfen, ob es eine gültige Executable ist... schon wegen DOS/16/32/64Bit
Den PE-Header werde ich noch unter die Lupe nehmen. Damit erübrigt sich wohl meine Frage.

Danke nochmal an alle!:thumb:

[OT]
Zitat:

PS. Ich kann mit einem Byte auch 257 Zustände speichern
Wie das? :lol:
Ich schaffe nur 256 :gruebel: 0, 1, 2, 3, ..., 255
Oder habe ich da einen Denkfehler?
[/OT]

himitsu 16. Sep 2010 18:33

AW: Unterscheidung verschiedener Exe-Typen
 
Du kannst ja mal auf Luckies Webseite oder im Forum nach dem Code suchen, welcher die CompileTime ausließt ... da hast du die Header mit enthalten, daß dieses dort ausgelesen wird.


Mit TreeStateBits bekommt man 6561 Werte da rein.
(Strom an, Strom aus oder so lala ... oder ... Minus, nix oder Plus)

Satty67 16. Sep 2010 18:39

AW: Unterscheidung verschiedener Exe-Typen
 
[OT]

Zitat:

Zitat von implementation (Beitrag 1050154)
Wie das? :lol:
Ich schaffe nur 256 :gruebel: 0, 1, 2, 3, ..., 255

Ich hab' ja auch die Aussage etwas verändert, erst dadurch wird es möglich:

Byte-Element (Object, Datenbankfeld) hat die Zustände: 0-255 oder null

An Chuck Norris komme ich nicht ran ;)

PS: Oder wenn ich himitsu's Hinweis lese, mit null für jedes Bit eben noch mehr.

[/OT]

implementation 16. Sep 2010 18:52

AW: Unterscheidung verschiedener Exe-Typen
 
Habe mir jetzt einfach mal Microsofts Spezifikation zu COFF heruntergeladen und überflogen
Interessant finde ich, dass .NET von Windows nicht als Subsystem angesehen wird:
Code:
Constant                              Value   Description
IMAGE_SUBSYSTEM_UNKNOWN               0        An unknown subsystem
IMAGE_SUBSYSTEM_NATIVE                1        Device drivers and native Windows processes
IMAGE_SUBSYSTEM_WINDOWS_GUI           2        The Windows graphical user interface (GUI) subsystem
IMAGE_SUBSYSTEM_WINDOWS_CUI           3        The Windows character subsystem
IMAGE_SUBSYSTEM_POSIX_CUI             7        The Posix character subsystem
IMAGE_SUBSYSTEM_WINDOWS_CE_GUI        9        Windows CE
IMAGE_SUBSYSTEM_EFI_APPLICATION       10       An Extensible Firmware Interface (EFI) application
IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER11       An EFI driver with boot services
IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER    12       An EFI driver with run-time services
IMAGE_SUBSYSTEM_EFI_ROM               13       An EFI ROM image
IMAGE_SUBSYSTEM_XBOX                  14       XBOX
Zu .NET taucht erst später ein Feld im Optional Header auf:
Code:
208/224   8   CLR Runtime Header   The CLR runtime header address and size. For more information, see section 6.10, “The .cormeta Section (Object Only).”
Dem Verweis zur .cormeta-Section bin ich gefolgt. Aber das "(Object Only)" irritiert mich. :shock:

Also kann's das nicht sein :glaskugel:

Aber sonst finde ich dort nirgends etwas dazu...

Kennt sich hier jemand genauer mit den Headern aus und hat vielleicht einen kleinen Hinweis für mich?

[EDIT]
Zitat:

Du kannst ja mal auf Luckies Webseite oder im Forum nach dem Code suchen, welcher die CompileTime ausließt ... da hast du die Header mit enthalten, daß dieses dort ausgelesen wird.
Werde ich mir anschauen, Danke!

[EDIT2]
Bin ich zu blöd, oder warum finde ich den Code nicht? :gruebel:
Wie heißt das Programm / die Unit / wasauchimmer denn?

mleyen 17. Sep 2010 09:55

AW: Unterscheidung verschiedener Exe-Typen
 
Zitat:

Zitat von implementation (Beitrag 1050161)
[EDIT2]
Bin ich zu blöd, oder warum finde ich den Code nicht? :gruebel:
Wie heißt das Programm / die Unit / wasauchimmer denn?

Ich tippe mal auf dies.

Zitat:

Zitat von implementation (Beitrag 1050154)
[OT]
Zitat:

PS. Ich kann mit einem Byte auch 257 Zustände speichern
Wie das? :lol:
Ich schaffe nur 256 :gruebel: 0, 1, 2, 3, ..., 255
Oder habe ich da einen Denkfehler?
[/OT]

Wenn man es schafft mehr als 8 Bits (in jeglicher Kombination) in 8 Bit zu komprimieren, dann könnte man
Delphi-Quellcode:
2^(UncompressedSize)-2^(8)
Zustände mehr in 8 Bit abspeichern. :thumb:
Also scheint sich Chuck Norris doch nur im Rahmen des Möglichen zu bewegen :stupid:
(Und ja, ich weiß das es den Komprimierungsalgo nicht geben kann)^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:10 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