Ergebnis 1 bis 20 von 21

Thema: Welche Programmiersprache für welches Projekt?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    [QUOTE=Rolus]Direkt die Prozessorenbefehle einzutippen ist natürlich auch nicht schlecht. ;) Aber unter Linux AFAIK etwas schwerer - dank Dateiformat. Unter Windows reicht ja die Endung meistens schon aus.[/code]
    So, dann schreib' mal den Text "Hallo Welt" in eine Textdatei und häng' .exe an den Dateinamen an. Du erhältst kein ausführbares Programm.
    Linux hat ein anderes Format für ausführbare Dateien (ELF; Windows benutzt PE), aber das macht das Erstellen von ausführbaren Programmen nicht komplizierter.

    Zitat Zitat
    Btw, Jesus, wieso kommt Assembler in deiner Auflistung vor den Programmiersprachen?
    Weil ich beim Editieren nicht aufgepaßt habe.

  2. #2
    Zitat Zitat von Jesus_666
    So, dann schreib' mal den Text "Hallo Welt" in eine Textdatei und häng' .exe an den Dateinamen an. Du erhältst kein ausführbares Programm.
    Linux hat ein anderes Format für ausführbare Dateien
    Hm, ich habe "Prozessorenbefehle" geschrieben und nicht ASCII-Text.
    Wenn ich die Prozessorenbefehle in eine Datei schreibe (den auszugebenden ASCII Text natürlich auch) und das ganze *.exe nenne, bekomme ich eine ausführbare Datei. Also für ein einfaches HelloWorld wäre der Code in hexadezimaler schreibweise:
    Code:
    BA 08 01 B4 09 CD 21 C3 48 61 6C 6C 6F 20 57 65 6C 74 24
    Erläuterung: BA füllt das DX-Register mit dem folgenden 16-Bit Wert 0108, was der Offset-Adresse des auszugebenden String entspricht. B4 füllt das AH-Register mit dem folgenden Wert 09, weil wir die Funktion 9 des Dos-Interruptes aufrufen wollen. CD 21 ruft nämlich den Dos-Interrupt 21h auf, der einen $-terminierten String ausgibt. C3 ist der Rücksprungbefehl - hier wird das Programm beendet und es geht zurück zu Windows. Der Rest ist der $-terminierte ASCII Code von "Hallo Welt" (48=H bis 74=t) natürlich alles in Hexadezimalschreibweise, damit man es mit einem Hexeditor als *.exe speichern kann und ein ausführbares Programm bekommt (ein sehr kleines HelloWorld - das schafft man mit C nie).
    Man kann unter Windows also einfach Prozessorenbefehle in eine Datei schreiben, dieser die richtige Endung geben und ausführen ohne dass man sich an irgendein Dateiformat halten muss. Und ich meine, dass das unter Linux nicht geht - aber probiert habe ich es noch nicht. Wäre aber quasi der gleiche Code, bloß dass man statt Dos-Interrupts natürlich Linux System Calls verwenden sollte.

    freundliche Grüße, Rolus

  3. #3
    Zitat Zitat von Rolus
    Hm, ich habe "Prozessorenbefehle" geschrieben und nicht ASCII-Text.
    Wenn ich die Prozessorenbefehle in eine Datei schreibe (den auszugebenden ASCII Text natürlich auch) und das ganze *.exe nenne, bekomme ich eine ausführbare Datei. Also für ein einfaches HelloWorld wäre der Code in hexadezimaler schreibweise:

    [...]

    Man kann unter Windows also einfach Prozessorenbefehle in eine Datei schreiben, dieser die richtige Endung geben und ausführen ohne dass man sich an irgendein Dateiformat halten muss. Und ich meine, dass das unter Linux nicht geht - aber probiert habe ich es noch nicht. Wäre aber quasi der gleiche Code, bloß dass man statt Dos-Interrupts natürlich Linux System Calls verwenden sollte.

    freundliche Grüße, Rolus
    Und das funktioniert genau deshalb, weil Windows nicht ausschließlich nach der Dateiendung sieht. Was du schreibst ist eine COM-Datei und Windows weiß das (bei ausführbaren Dateien bestimmt Windows anhand des Inhalts der ersten paar Bytes, um welches Format es sich handelt. Beispielsweise ist bei 9x command.com in Wirklichkeit eine PE und wird auch als solche ausgeführt).

    Wie Dingsi schon angemerkt hat hängt die Ausführbarkeit einer Datei unter Linux nur davon ab, ob sie richtig gechmodet ist.
    Ob man den Code direkt ausführen kann ist fraglich - als Linux entwickelt wurde was COM schon dermaßen obsolet, daß es im Kernel AFAIK keine Unterstützung dafür gibt. Es sollte aber ziemlich einfach sein, ein Skript zu schreiben, das beliebigen Code im ELF einwickelt.
    Falls der Kernel noch mit Unterstützung für a.out kompiliert wurde könnte es auch sein, daß man so relativ einfach seinen Code ausführen kann - aber ich bin mir da nicht sicher.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •