Windows 8 und reine Assembler Programme



  • Sonnenschein? Na ja, die Wolken sind etwas heller heute. 😃
    Was das deinstallieren angeht: Gute Idee wenn die das ernst meinen. Es kann doch wohl nicht so schwer sein einfach geradeaus Code auszuführen. 😡
    Unter dem .COM-File Wikipedia Artikel finde ich auch nur dass das ein altes DOS-EXE Format ist oder so. Keine Ahnung was das jetzt mit reinem Bytecode zu tun hat.



  • The COM format is the original binary executable format used in CP/M and MS-DOS. It is very simple; it has no header (with the exception of CP/M 3 files), and contains no metadata, only code and data.



  • @Fensterputzer

    Du musst eine Exe Datei erstellen! NICHT COM
    Hättest du in ein Tutorial geschaut hättest du warscheinlich deinen Fehler erkannt.

    Ich glaub ich such mal ein Tutorial für dich raus hab aufer Arbeit eh gerade nix zu tun. (Es sei den ich bekomme plötzlich Lust was anderes zu machen dann hättest du in dem Fall Pech. 😃 )



  • Fensterputzer schrieb:

    Es kann doch wohl nicht so schwer sein einfach geradeaus Code auszuführen. 😡

    Wenn es sich um Code handelt, den die CPU nicht ausführen kann, dann ist das eben leider doch nicht so einfach...



  • Nein, such nicht. Ich möchte ja gerade eine reine Bytecode Datei ausführen.

    Wenn es sich um Code handelt, den die CPU nicht ausführen kann, dann ist das eben leider doch nicht so einfach...

    Warum sollte die CPU das nicht ausführen können? Es ist einfach nur stinknormaler x86 Bytecode.



  • Fensterputzer schrieb:

    Nein, such nicht. Ich möchte ja gerade eine reine Bytecode Datei ausführen.

    Wenn es sich um Code handelt, den die CPU nicht ausführen kann, dann ist das eben leider doch nicht so einfach...

    Warum sollte die CPU das nicht ausführen können? Es ist einfach nur stinknormaler x86 Bytecode.

    Es ist 16-Bit Code und den kann eine aktuelle x86 CPU im Long Mode nicht ausführen. Ich finde es höchst bemerkenswert, dass 32 Bit Systeme das heute sogar noch unterstützen, weil immerhin haben wir es da mit Technologie zu tun, die vor 20 Jahren schon veraltet war. Wenn du sowas unbedingt ausführen musst, dann verwend einen Emulator wie z.B. DOSBox...



  • Und wie sage ich meinem Assembler dann, dass er 64-bit Code ausspucken soll?





  • Glaubst du ernsthaft, danach hätte ich noch nicht gegoogelt? Ich habe bereits FASM, NASM und YASM installiert. Unter YASM darf ich sogar die r Register nutzen. Kommt aber trotzdem der gleiche Fehler. 😞



  • aha



  • Aha, ist wohl doch kein 16 bit Code.



  • Wer weiß, klingt halt so, als ob deine Assembler keine brauchbare exe erzeugen. Am besten wärs also wohl mal, das Manual des jeweiligen Assemblers zu studieren und rauszufinden, wie man ihn richtig verwendet...



  • http://pixelbanane.de/yafu/1752352184/nasmdoc.pdf

    Bytecode? Meinst du sowas?

    Statischer WinExec shellcode

    [Section .text]
    BITS 32
    global _start
    
    _start:
    
    jmp short go 
    
    execute_sh: 
    
        pop ebx 
    	add ebx,8
    
    	xor eax,eax
    	mov [ebx],al  
    
    	sub ebx,8     
    
    	push eax 
        push ebx 
    
        mov ebx,0x7c862585  ; WinExec
        call ebx
    
    	xor eax,eax
    	push eax
    	mov ebx,0x7c81d20a  ; ExitProcess
    	call ebx
    
    go: 
        call execute_sh 
        db "calc.exeA"
    

    Erzeugt folgenden Shellcode:

    "\xeb\x1e\x5b\x83\xc3\x8\x31\xc0\x88\x3"
    "\x83\xeb\x8\x50\x53\xbb\x85\x25\x86\x7c"
    "\xff\xd3\x31\xc0\x50\xbb\xa\xd2\x81\x7c"
    "\xff\xd3\xe8\xdd\xff\xff\xff\x63\x61\x6c"
    "\x63\x2e\x65\x78\x65\x41";
    

    Kann man so ausführen (Funktions Adressen in diesem Fall nicht vergessen zu ändern oder gleich alles Dynamisch machen. [sry war mir zu viel Arbeit^^] ):

    #include <iostream>
    
    int main()
    {
    char sh[]="\xeb\x1e\x5b\x83\xc3\x8\x31\xc0\x88\x3"
    "\x83\xeb\x8\x50\x53\xbb\x85\x25\x86\x7c"
    "\xff\xd3\x31\xc0\x50\xbb\xa\xd2\x81\x7c"
    "\xff\xd3\xe8\xdd\xff\xff\xff\x63\x61\x6c"
    "\x63\x2e\x65\x78\x65\x41";
    
    int (*call)();
    call = ( int(*)() ) &sh;
    (*call)();
    
    return 0;
    }
    

    btw. 😃

    Shade Of Mine schrieb:

    Bei mir scheint gerade die Sonne...

    Wohnst du etwa auch in Münster? 😃

    ⚠
    NUR IN MÜNSTER KANN JETZT DIE SONNEN SCHEINEN SONST NIRGENDWO ! :p
    Ich kenn den Wetterfrosch persönlich. 🕶

    lol mir muss gerade echt langweillig sein. xD



  • dot schrieb:

    Wer weiß, klingt halt so, als ob deine Assembler keine brauchbare exe erzeugen. Am besten wärs also wohl mal, das Manual des jeweiligen Assemblers zu studieren und rauszufinden, wie man ihn richtig verwendet...

    Natürlich erzeugt der keine "brauchebare exe" wie oft muss ich das denn noch schreiben es ist einfach nur Bytecode.

    Bytecode? Meinst du sowas?

    Ja. Aber der C++ Compiler macht mir ja wieder eine normale exe draus.



  • Fensterputzer schrieb:

    Natürlich erzeugt der keine "brauchebare exe" wie oft muss ich das denn noch schreiben es ist einfach nur Bytecode.

    Ich wiederhole mich:
    DAS IST DAS PROBLEM!



  • Fensterputzer schrieb:

    Glaubst du ernsthaft, danach hätte ich noch nicht gegoogelt? Ich habe bereits FASM, NASM und YASM installiert. Unter YASM darf ich sogar die r Register nutzen. Kommt aber trotzdem der gleiche Fehler. 😞

    Ich empfehle der Moderation, diesen Thread in die Assembler-Ecke zu verschieben. Es handelt sich um einen beliebten Verständnisfehler:

    1. Der Prozessor (= die CPU) hat verschiedene Betriebsarten: 16-Bit, 32-Bit, 64-Bit, Real, Unreal, Protected usw. Diese Betriebsarten sind dermaßen unterschiedlich, dass man sogar sagen kann, man habe je nach Einstellung verschiedene Prozessoren vor sich. Obwohl die Assembler-Befehle ähnlich bzw. identisch aussehen, werden sie vom entsprechend eingestellten Assembler in unterschiedliche Maschinenbefehle umgesetzt. Die Betriebsarten werden vom Betriebssystem eingestellt. Manchmal - aber nicht immer - kann man von einer Betriebsart kurz in die andere wechseln und wieder zurück. Das geht aber nicht automatisch. Wenn man ein 16-Bit-Real-Programm auf einem Prozessor ablaufen lässt, der gerade im 32-Bit-Protected-Mode läuft, gibt es eine Katastrophe, da - wie gesagt - die Maschinenbefehle ganz anders interpretiert werden.

    2. Windows 8 verlangt ein Programm im PE-(Portable Executable)-Format. Das ist ein besonderes Dateiformat und nicht zu verwechseln mit den Betriebsarten. In diesem Format befindet sich typischerweise ein 32-Bit- oder 64-Bit-Programm. Jedes andere Format wird abgelehnt. Ältere Windosen haben noch ein spezielles Programm, mit dem man auch andere Formate (DOS-EXE und DOS-COM) laden und ausführen kann. In diesen anderen Formaten befinden sich typischerweise 16-Bit-Programme, die das Betriebssystem MS-DOS verlangen.

    3. Um noch alte MS-DOS- bzw. 16-Bit-Programme auf neuen Windows-Systemen ablaufen zu lassen, muss man eine MS-DOS-Umgebung installieren, z.B. DOS-Box:

    http://www.dosbox.com/

    HTH
    viele grüße
    ralph

    Edit: DOS-COM ist ein Format, das nur Bytecode enthält. MS-DOS konnte mit diesem Format umgehen, reines Windows tut das nicht.



  • Und warum hat sich Microsoft entschieden das nicht mehr zu unterstützen? Insbesondere da es mit Windows 7 noch problemlos ging. Das qualifiziert schon zur dümmsten Entscheidung des Jahrhunderts. Man muss das doch irgendwo wieder anstellen können. 😡



  • Fensterputzer schrieb:

    Und warum hat sich Microsoft entschieden das nicht mehr zu unterstützen? Insbesondere da es mit Windows 7 noch problemlos ging. Das qualifiziert schon zur dümmsten Entscheidung des Jahrhunderts. Man muss das doch irgendwo wieder anstellen können. 😡

    com Dateien waren vor 20 Jahren schon veraltet.



  • Fensterputzer schrieb:

    Insbesondere da es mit Windows 7 noch problemlos ging.

    Win 7 64 Bit kann auch kein 16 Bit Programm ausführen. 🙄

    Btw. eben schien hier noch die Sonne jetzt ist ein Mega Schneesturm am Start. o_O
    QQ



  • Falls du Win8 32 Bit haben solltest, kannst du ja mal checken, ob das hier in der Final Version noch drin ist:

    http://w8.apfelböck.de/521-16-bit-programme-ausfuhren

    Ansonsten sollte es doch wohl kein Problem sein, DosBox zu benutzen. Immerhin nutzt du hier unheimlich veraltete Technik. Du kannst dich wirklich nicht beschweren, dass Windows nach 20 Jahren auch mal Altlasten abwirft.


Anmelden zum Antworten