Unterschied zwischen einem ausführbaren und einem Datendateiformat?

2

Ein paar schnelle Dinge aus dem Weg, da ich weiß, dass diese Art von Fragen oft einen böswilligen Hintergrund haben.

  • Ich versuche nicht, etwas in einem Dateiformat (jpg) auszuführen
  • Ich versuche nicht, einfach das Endziel zu erreichen (dh etwas wie ein JPG aussehen zu lassen, sondern es herauszuholen)
  • Ich versuche nur, den Unterschied zwischen dem Parsen von Informationen durch einen Computer zu erkennen

Nach meinem Verständnis analysiert ein Computer, der sich mit einem Datendateiformat wie JPG, PDF usw. befasst, die Informationen nur in einem Container, der meiner Meinung nach bestimmten Layouts / Spezifikationen entspricht. Häufig ist zu hören, dass der Unterschied zwischen einem Datendateiformat und einer ausführbaren Datei darin besteht, dass der Computer die Datendatei nicht "ausführt". Meine Frage ist: Woher weiß der Computer, was er lesen und was er ausführen soll? Was ist der Unterschied? Mein geistiges Bild von einem Computer ist etwas, das Anweisungen Schritt für Schritt liest. Wenn in der Mitte eines Jpg, das analysiert wurde, ein Shellcode zum Aufklappen eines Nachrichtenfelds angezeigt wird, warum wird es beim Lesen nicht aktiviert?

Mir ist bewusst, dass Dinge über Exploits für die Software ausgeführt werden können, indem der Parser ausgetrickst wird - vielleicht über Pufferüberläufe usw. usw. Auch hier ist das Endziel, wie es erreicht werden kann, weniger wichtig. Ich bin mehr daran interessiert, wie der Computer erkennen kann, was gelesen werden soll, was ausgeführt werden soll und wie das Lesen ohne Ausführung erreicht werden kann.

Peleus
quelle

Antworten:

1

Nun, Datendateien werden von Programmen geöffnet. Und Programme / ausführbare Dateien selbst öffnen diese Dateien und interpretieren die Daten.

Ausführbare Dateien werden vom Betriebssystem für die CPU geöffnet / ausgeführt. Sie enthalten Anweisungen, die Daten für die CPU sind.

Wenn eine Datendatei Anweisungen für eine CPU enthält, wird sie normalerweise nicht an die CPU weitergeleitet, da es sich nur um eine Datei handelt, die Ihr Programm liest, sodass sie höchstens Anweisungen für Ihr Programm enthalten kann. Aber wenn etwas in einem Programm schief geht, wie eine Datendatei einen Pufferüberlauf in einem Programm verursacht, könnte ich annehmen, dass der Inhalt der Datendatei an die CPU gesendet wird.

Man könnte eine jpg-Datei umbenennen, um sie auszuführen. Sie wird von der CPU ausgeführt und gibt einen Fehler aus, es sei denn, sie enthält wirklich Maschinencode (CPU-Anweisungen). Dann handelt es sich wirklich um eine ausführbare Datei mit einer falschen Erweiterung hat die richtige erweiterung.

barlop
quelle
Geil, danke. Es war der Zwischenschritt der Anwendung (ausführbar -> CPU vs schreibgeschützt -> Anwendung -> CPU), den ich in meinem Gedankenprozess vermisst habe, worauf jetzt schmerzhaft hingewiesen wird. Ich habe immer daran gedacht, dass die CPU alles in diese Richtung analysiert (ausführbar -> CPU vs. schreibgeschützt -> CPU -> Anwendung für Anzeige).
Peleus
Ich bin mir nicht sicher, was Sie unter CPU "vs" (schreibgeschützt) verstehen. vs bedeutet in der Regel versus in Englisch! Übrigens: Ein Programm kann im einfachen Fall nur die ausführbare Datei sein und muss nichts anzeigen. Es wird als Prozess in den RAM geladen. Ich nehme an, es würde nur gelesen werden. Die CPU holt jeden Befehl und führt ihn aus. Alte Bücher werden darüber diskutieren. Die Teile eines CPU / Prozessor-Programmzählers. Das Speicheradressregister (MAR) Das Speicherdatenregister (MDR), Universalregister. Und zwischen CPU und RAM, dem Adressbus und dem Datenbus sowie den Geräten, die die CPU liest / schreibt, um Speicherplätze zu erhalten.
Barlop
Das Programm hat möglicherweise eine Anweisung, etwas an die Anzeige zu senden, dh auf dem Bildschirm auszugeben, oder es führt einfach seine Berechnungen durch. Ein Neuling könnte eine Menge Code schreiben, sie schließlich kompilieren lassen und er führt sie aus und denkt, dass sie nicht läuft oder nichts tut, aber sie hat einfach nichts auf dem Bildschirm ausgegeben, weil er es nicht gesagt hat!
Barlop
1

Unter Windows ist es nur die Erweiterung, die die Datei ausführbar macht - um genau zu sein, werden EXE-Dateien ausgeführt und einige andere Formate werden von cmdoder PowerShell interpretiert .

Auf Unix-ähnlichen Systemen gibt es ein Ausführungsbit. Wenn Sie mit dem Konzept der Windows-Dateiattribute vertraut sind, können Sie sich das als eine Art Attribut vorstellen. Jede Datei kann ein gesetztes Ausführungsbit haben - es ist möglich, es auszuführen (als Programm, Skript usw.). Andernfalls wird es vom Betriebssystem immer als reguläre Datei behandelt, die nicht ausgeführt werden kann.

Unix-ähnliche Betriebssysteme verwenden nicht das Konzept der Dateierweiterungen, sondern versuchen, Dateien anhand ihres Inhalts zu identifizieren. In der Regel bilden nur wenige erste Bytes einer Datei eine magische Zahl - eine eindeutige Dateitypkennung (siehe Wikipedia-Artikel ).

gronostaj
quelle
Danke, etwas abseits von dem, was ich mich gefragt habe (hey, wahrscheinlich ist es meine Schuld, die Frage zu erklären!), Aber dennoch nützliche Informationen zu wissen. Barlop-Hit Ich war neugierig, was die Anwendungsschicht betrifft, die die CPU im Wesentlichen vor ausführbaren Anweisungen schützt.
Peleus