Verblüffende Windows-Bugs [Pseudo-Programmierung mit Textdateien]
-
hrhr, teste mal "000F" da wartet er wirklich 0,5 Sekunden bevor er es beendet... *fg*
-
Oh man, das sind doch ganz normale Exe-Codes. Guck mal auf meine Homepage.
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Themen rund um Offtopic verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
In einer exe-Datei stehen auch nur Daten drin. Wie diese Daten dann interpretiert werden, ist was anderes. Ein Texteditor erkennt darin Zeichen, die dargestellt werden sollen. Bei einer Exe-Datei erkennt das System darin Befehle. Ganz einfach.
-
Aber es ist doch irgendwie verwunderlich. Am Anfang einer EXE steht doch erstmal ein großer Header. Da ist doch nichts zum Ausführen. Oder inpretiert er das ganze als COM-Datei, weil zum Beispiel am Anfang nicht MZ steht?
-
Jups.
Windows macht sich bei ausfuehrbaren Dateien nicht sonderlich viel aus Dateierweiterungen.
-
Dieser Header wird auch Programmstack genannt, da kein Programmstack vorhanden ist, bzw. er nicht gültig ist, sollten diese "Programme" nicht laufen. Das ist ein Bug von Windows, dass die Dateien dennoch laufen. Teste das unter Linux oder unter BSD, du wirst sehen, dass es da keine Befehle sind, sondern sich das Betriebssystem darüber ordnungsgemäß aufregt. Das mit dem Curser ist aber dennoch interessant, und irgendwie ist es lustig, dass man auch "Pseudoprogramme" ohne jeglicher Programmiersprache erstellen kann...
MfG Windoof
-
du hast keine Ahnung Windoof.
-
Müssen exe|dll Dateien nicht immer mit MZ anfangen??
-
Da dieses oder andere Informationen nicht vorhanden sind wird es als .com-datei behandelt. Dieses Format brauch keinen Header.
-
fresse halten schrieb:
du hast keine Ahnung Windoof.
Doch, die hab ich, ich hab mich damit befasst und mich mit Kollegen darüber unterhalten, diemeinten alle, dass es ein Bug von Windows ist... Klar werden sie als .com behandelt, weil kein Programmstack vorhanden ist, deshalb funktionieren sie auch nicht unter unix-systemen, denn da brauchen anwendungen einen Programmstack, um zu laufen...
-
Seltsamerweise kann ich lol.exe weder umbenennen noch löschen...
-
Bei mir kommen reihenweise Fehler.
16-Bit-DOS-Teilsystem schrieb:
C:\lol.exe
Die NTVDM-CPU hat einen ungültigen Befehl entdeckt.
CS:... IP:... OP: ... Klicken sie auf "Schliessen", um die Anwendung zu beenden.
-
Windoof schrieb:
und irgendwie ist es lustig, dass man auch "Pseudoprogramme" ohne jeglicher Programmiersprache erstellen kann...
Was ist daran lustig? Warum sollte es denn nicht gehen? Meinst du ein Assembler zaubert?
-
Ihr Spacken. Das ist kein Bug in Windows. Unter Dos würde sich der Rechner vermutlich einfach aufhängen, Windows ist so schlau, den hängenden Task gleich abzuschießen. So what ?
-
Hi.
Ich hab mit nem Hex-Edit folgende Dinge eingegeben.
Eigentlich wollte ich "lol" ausgeben (sieht man am Ende des Codes),
aber wenn man das reinschreibt, wird der Bildschrim halb grün !Ich weiss nicht, was das ist !
30E4B81300CD10BA1201B409CD21B44CCD216C6F6C030A24
Mit Batchskript starten !!!
@echo off call <name>.com pause
mfg BlueShift
-
BlueShift schrieb:
Hi.
Ich hab mit nem Hex-Edit folgende Dinge eingegeben.
Eigentlich wollte ich "lol" ausgeben (sieht man am Ende des Codes),
aber wenn man das reinschreibt, wird der Bildschrim halb grün !Ich weiss nicht, was das ist !
30E4B81300CD10BA1201B409CD21B44CCD216C6F6C030A24
Dein code ist sowieso ein bissel... schlecht (Koennte man um mindestens 6Byte kuerzen ohne die Funktionalitaet auch nur im geringsten zu beeinflussen), aber auf Win98 funktionierts.
Auf WinXP funktioniert er auch, wenn man auf einen Tastetdruck wartet und danach wieder in den Textmodus zurueckschaltet.
Die Konsole kommt aber offensichtlich ansonsten nicht mit dem Grafikmodus klar.
Also versuch mal folgendes ;):B8 13 00 CD 10 B4 09 BA 16 01 CD 21 33 C0 CD 16 B8 03 00 CD 10 C3 6C 6F 6C 03 0A 24
-
Ich hoffe, hier glaubt nicht irgendjemand diesem Windoof-"Experten". Der Stack ist eine Datenstruktur, die beim Programmstart angelegt wird, und in die automatische (lokale) Variablen, Funktionsrückgabewerte und Rücksprungadressen abgelegt werden. In richtigen .EXE-Dateien ist im Dateikopf definiert, wie groß der Stack sein muss. In .COM-Dateien gibt es sowas nicht, denen wird deshalb pauschal für das gesamte Programm ein 64-KByte-Segment zugewiesen, in dem der Stack am oberen Ende beginnt und nach unten hin wächst. Man kann deshalb -- etwas ungenau -- auch sagen, .COM-Dateien hätten keinen Stack.
Windows erkennt an den ersten beiden Zeichen der Datei, ob es sich um COM oder EXE handelt (die Dateierweiterung ist dagegen überrauschenderweise relativ unerheblich). Das Kennzeichen für eine EXE-Datei ist 'MZ' (gerüchteweise hat sich damals Mike Zbikovsky (oder so) derart verewigt), COM-Dateien haben keine Kennzeichen, sondern bestehen komplett aus Maschinencode und Daten. Die ersten zwei oder drei Bytes einer COM-Datei sind deshalb oftmals der Maschinenbefehl für einen Sprung zum eigentlichen Programmstart.
Wir halten fest: EXE-Dateien haben eine MZ-Kennzeichnung, COM-Dateien nicht. EXE-Dateien haben einen Stack, COM-Dateien nicht (ungenau ausgedrückt, s.o.). Daraus zu schließen, dass MZ der Stack ist, ist für einen Laien verständlich, für einen Programmierer recht "kreativ". Auf dieser Behauptung zu beharren, nachdem sie in Frage gestellt wird, ist dagegen Windoof-typisch.
-
Also wird diese Datei als .com-Datei ausgeführt... Naja, auch eine Mögklichkeit, aber wieso läufts dann unter Linux nicht? Die haben doch auch ein Format, wo kein Programmstack gebraucht wird...?
-
@Windoof
Was meinst du wohl warum man für Windows und für Linux die Programme extra compilieren muss und warum .Exe-Dateien von Windows nicht so einfach unter Linux laufen und umgekehrt?