.COM Dateien aus DvCpp ~ in C Geschrieben?



  • Hi!
    Erstmal Hallo!
    Zweitens hoffe ich das ist das richtige forum..

    Und Drittens zu meiner frage, kann ich auch .COM dateien in C schreiben?
    Ich benutze derzeit DevCpp als Compiler und IDE, es geht um genauer zu sein darum, das ich die Aufgabe habe, aus einer windows Batch datei herraus, eine .COM datei zu erzeugen, da ich aber keine lust habe, assembly zu lernen um den Code zu erstellen, den ich dann über den debugger von windows (system("debug < bla..")) in eine .com datei umwandeln kann, wollte ich einmal wissen, ob das auch anderst möglich ist, also, den entsprechenden Code aus einer C datei heraus zu erzeugen, ich besorge mir auch gerne einen anderen compiler dafür.

    Danke im Vorab, EmCee



  • Dieser Thread wurde von Moderator/in Shade Of Mine aus dem Forum ANSI C in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hi,

    du meinst warscheinlich Assembler und nicht Assembly (=> so bezeichnet man, vereinfacht gesagt, eine Ausführbare Datei in .net).

    Wenn du Assembler meinst, kannst du dir das deinem C(++) Programm entsprechende Assembler-Programm auch von deinem Compiler erzeugen lassen (wie das geht sollte im Handbuch des Compilers stehen.

    Des weiteren gibt es noch die Möglichkeit, die .exe einfach in .bat umzubenennen. Auf den meisten Windowssystemen (unter ME und 98 geht es sicher, wie es mit XP, 2000 u. NT steht weiß ich nicht) wird der mascinencode der .bat dann ganz normal ausgeführt. (Garantie geb ich natürlich keine).



  • Hi!

    Also, nochmal um es ganeuer zu erklähren, ich sehe öfters mal, soleche codes:

    nWORD.COM 
    e0100 BE 81 00 AC 3C 20 74 FB 4E 2B C0 2A FF B9 0A 00 
    e0110 8A 1C 46 80 EB 30 72 06 F7 E1 01 D8 73 F2 85 C0 
    e0120 74 01 48 50 BE 9F 01 2B DB 89 F2 B9 00 F0 B4 3F 
    e0130 CD 21 8B D8 C6 00 1A BA 98 01 BB 01 00 B9 07 00 
    e0140 B4 40 CD 21 5D 2B C9 AC 3C 20 74 FB 3C 2C 74 F7 
    e0150 3C 3B 74 F3 3C 0D 74 EF 3C 0A 74 EB 4E 89 F2 80 
    e0160 3C 1A 74 1E 46 8A 04 3C 20 74 10 3C 2C 74 0C 3C 
    e0170 3B 74 08 3C 0D 74 04 3C 0A 75 E4 3B CD 74 03 41 
    e0180 EB C5 3B CD 75 08 8B CE 29 D1 B4 40 CD 21 B4 3E 
    e0190 CD 21 2A C0 B4 4C CD 21 73 65 74 20 25 31 3D 
    rCX 
    9F 
    w 
    q
    

    Und wenn man das dann zb als test.txt speichert, und in die Konsole eingibt "debug < test.txt" dan erhält man eine .com datei words.com die dann ausführbar ist, und ich würde gerne wissen, wie ich den Obigen hexcode den cih ja dazu bruauche aus einem C Sourcecode heraus bekomme.

    Hoffe das war jetzt so verständlich.
    bye...



  • Du willst ein C-Listing zu einem .COM-Programm kompilieren?
    Sicher dass Du COM brauchst? COM ist ein MS-DOS Format, kann maximal 65536 Bytes gross sein und setzt ein 16bit Realmode-Speichermodell voraus (MS-DOS eben). Ich weiss es nicht mehr so genau, aber der Turbo C++ Compiler (kostenlos, siehe FAQ: Andere Kompiler Forum) kann exe-Dateien fuer das Tiny-Speichermodell kompilieren, so dass man dann die resultierende EXE-Datei mit dem Programm EXE2BIN in eine COM-Datei umwandeln kann.



  • Also, das endgültige ziel ist eigendlich, es irgendwie hinzubekommen ein programm (Ob EXE oder COM ist eigendlich egal) in einer Batch datei zu lagern, und dann wieder das uhrsprüngliche programm herzustellen.

    Also, als beispiel währe bei der open geposteten com folgender code zu denken:

    @echo off
    : Leere datei word.tmp erzeugen
    ECHO.>> word.tmp
    : Daten in datei schreiben
    ECHO nWORD.COM > word.tmp
    ECHO e0100 BE 81 00 AC 3C 20 74 FB 4E 2B C0 2A FF B9 0A 00 > word.tmp
    ECHO e0110 8A 1C 46 80 EB 30 72 06 F7 E1 01 D8 73 F2 85 C0 > word.tmp
    ECHO e0120 74 01 48 50 BE 9F 01 2B DB 89 F2 B9 00 F0 B4 3F > word.tmp
    ECHO e0130 CD 21 8B D8 C6 00 1A BA 98 01 BB 01 00 B9 07 00 > word.tmp
    ECHO e0140 B4 40 CD 21 5D 2B C9 AC 3C 20 74 FB 3C 2C 74 F7 > word.tmp
    ECHO e0150 3C 3B 74 F3 3C 0D 74 EF 3C 0A 74 EB 4E 89 F2 80 > word.tmp
    ECHO e0160 3C 1A 74 1E 46 8A 04 3C 20 74 10 3C 2C 74 0C 3C > word.tmp
    ECHO e0170 3B 74 08 3C 0D 74 04 3C 0A 75 E4 3B CD 74 03 41 > word.tmp
    ECHO e0180 EB C5 3B CD 75 08 8B CE 29 D1 B4 40 CD 21 B4 3E > word.tmp
    ECHO e0190 CD 21 2A C0 B4 4C CD 21 73 65 74 20 25 31 3D > word.tmp
    ECHO rCX > word.tmp
    ECHO 9F > word.tmp
    ECHO w > word.tmp
    ECHO q > word.tmp
    : com erzeugen
    debug < word.tmp
    : Datei löschen
    DEL word.tmp > NUL
    : Ende
    ECHO Das wars, mit beliebiger taste beenden.
    PAUSE > NUL
    

    Und das was da passiert währe ja zum Beispeil ein weg, ein programm in einer Batch datei zwischenzuspeichern, klar, wenn das mit ner exe auch geht währe cool, aber ich habe leider überhaupt keine ahnung, wie das ganze da oben genau funktioniert, also speich, wie der debuger bedient wird, was für was steht usw..

    Also, wenn ihr mir da helfen könntet 😉



  • Hi!

    Also, hab jetzt die entscheidende idee, und brauche dazu nochmal eure hilfe, und zwar wenn ich wie oben beschreiben aus C heraus die entsprechende COM Anwendung erstellen kann, die ich dann mit dem Debugger in die COM umwandeln kann, dann könnte ich ja die COM als Programm machen, welche ihrer-seits den Binär(HEX)code aus eine txt datei in eine EXE umschreibt, udn diese nach getaner arbeit wieder löschen.

    Also, es besteht weiterhin interesse an einer Lösung.

    Mfg, EmCee


Anmelden zum Antworten