Windows 8 und reine Assembler Programme
-
-
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:
-
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.
-
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.
-
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:
HTH
viele grüße
ralphEdit: 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.
-
@Fensterputzer
Sagmal wie kann man bloss so bescheuert sein?
Es wurde dir hier schon 100x gesagt was Sache ist, und du kommst immer wieder mit der selben blöden Frage.-
Das was du "einfach Bytecode ausführen" nennst konnte Windows nur in der DOS Emulation, und zwar mit 16 Bit Code. Weil DOS das eben in Form der sog. .com Files unterstützt hat.
-
Um 32 Bit Programme auszuführen waren schon immer vollständige PE-Images aka .Exe Files nötig.
-
Auch um 16 Bit Programme mit mehr als 64kB Code und/oder Daten auszuführen waren schon immer PE-Images nötig.
-
In 64 Bit Windows Versionen wurde die DOS-Emulation entfernt, d.h. du kannst auf einem 64 Bit Windows auch keine .com Programme mehr ausführen. Und zwar mit der ersten 64 Bit Windows Version, nicht erst mit Windows 8. Dass es "mit Windows 7 noch ging" liegt vermutlich daran dass du ein 32 bittiges Windows 7 installiert hattest.
Und jetzt hör bitte auf hier rumzusülzen.
-
-
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.
Jau ich versteh dich vollkommen. Ich beschwere mich auch immer das mein Auto nicht mit Wasser fährt, denn die alten Dampfwagen konnten das doch damals auch. Aber niemenad will mir zuhören :(. Versteh nicht warum man das nicht abwärtskompatibel gelassen hat