disasm-fragen



  • hi folks!

    habe mal 2 grundlegende fragen zu asm/disassemblern:

    1. gibt es disassembler die eine (sagen wir mal DOS-) EXE so disassemblieren dass sie später mit einem dos-assembler/-linker wieder in (fast denselben) originalzustand und ausführbarkeit assemblierbar sind?

    2. gibt es eigentlich in ASM auch eine art funktionsaufruf?
    und woran erkenne ich z.b. das eine DOS-exe den INT13 mit speziellen params ansteuert?

    bin dankbar für erklärungen,
    gruss,

    ---loki



  • Hi.

    Zu 1:
    Ja. Mir faellt da zB. der Sourcer von V Communications Inc. ein.

    Zu 2:
    Was verstehst du unter "Funktionsaufruf"?

    Um zu sehen, wie oft/mit welchen Parametern ein Programm den int 13h aufruft, kannst du zB.
    1. Disassemblieren und den Quellcode durchgehen
    2. mit 'nen Debugger druebergehen
    3. mit einem TSR vorher den int 13h selbst belegen und ein Log fuehren.



  • thanx für die antworten.

    mit funktionsaufruf meine ich z.b.: kann man in ASM auf die Win32 API zugreifen und so z.b. eine windows messagebox erstellen?
    oder geht das nur wenn ich ASM mit einer anderen sprache (C/C++) paare?

    und noch eine frage: ist assembler-code eigentlich prozessorunabhängig?



  • Natürlich ist ein Funktionsaufruf in Assembler möglich, ein C Compiler erzeugt ja schließlich auch Assemblercode aus dem Quellcode.

    Assembler ist für jede CPU-Architektur (x86, Alpha, PowerPC, IA64, usw...) völlig unterschiedlich.



  • Also das einzige Problem beim Disassemblieren ist, dass die Funktionsnamen verloren gegangen sind. Diese existieren nur für den Compiler, bzw. den Präprozessor.

    Assembler ist sehr Prozessorunabhängig, wenn es einem egal ist, ob man sich ne Kuh oder nen Rucksack auf den Rücken bindet..

    Jeder Prozessortyp hat seinen eigenen Assembler.
    Mal so ne blöde Frage : warum willst du mit ASM arbeiten, wenn du nicht weißt, was ASM eigentlich ist ?

    greetz
    DjR



  • naja, ich will noch nicht damit arbeiten...

    die idee dahinter ist:

    vielleicht kennt jemand von euch das DOS-spiel "Bleifuss" ("Screamer" auf englisch).
    das wollte ich mal auf die SDL portieren.
    habe dafür die hersteller gefragt, ob die den source rausrücken würden...
    wollten die aber leider nicht.

    da dachte ich mir, es müsste doch möglich sein, so eine art interrupt-emulator zu proggen, der sich so benimmt wie die DOS-ints die für grafik, IO etc zuständig sind, und das ganze dann wieder über die SDL darzustellen. dass heisst also eigentlich ein wrapper von DOS-ints zu SDL-calls...
    dann einfach die original-exe des spiels disassemblen und die interrupt-aufrufe im code auf den interrupt-wrapper umleiten. dann das ganze neu assemblen und fertig.

    das problem ist das ich von der art und funktion der DOS-interrupts noch nix weiss/verstehe.

    also, ganz oberflächlich gesehen: ist das möglich?

    ich weiss dass das mit dem disassemblen nicht wirklich legal ist, aber ich glaube manche länder haben so eine regelung das es erlaubt ist um die kompatibilität wiederherzustellen, oder wenn das original-system veraltet ist (irgendwie so halt) ....

    bitte nicht vergessen: das sind alles nur ideen/überlegungen, ich behaupte nicht im geringsten dass es möglich ist, oder dass ich es könnte etc....

    ---loki



  • schon das disassemblieren der original - exe ist illegal.
    Mal abgesehen davon bezweifle ich, dass da soooo sehr viele ints drin sind..



  • DocJunioR schrieb:

    schon das disassemblieren der original - exe ist illegal.

    bist du dir da sicher?
    weiss nicht, aber ich habe gehört dass es (zumindest in deutschland) erlaubt ist um kompatibilität zu erlangen.

    DocJunioR schrieb:

    Mal abgesehen davon bezweifle ich, dass da soooo sehr viele ints drin sind..

    gut, reine theorie: ist das format der kommunikation zwischen INT und programm so, dass solch ein wrapper möglich wäre?

    bzw: ist die idee überhaupt machbar?



  • du darfst die original-exe zumindest nicht verändern.

    Es ist afaik möglich, interrupts abzufangen und selber zu handeln.
    WinNT tut dies, glaub ich auch..
    Ich hatte mal ein tolles buch, da stand sowas drin.. leider isses wech 😞

    Edit : hab da noch was gefunden :
    http://www.internals.com/articles/protmode/interrupts.htm



  • ok, schaue ich mir mal an.

    noch ne ganz dumme frage: was kann man über den int21 eigentlich alles machen? also ich glaube keyboard macht man damit. auch grafik?



  • nein. der int 21 ist zur Dateiverwaltung, Geräte ansprechen und glaube auch Textformatierung, etc.
    int 21 ist auch kein BIOS-Interrupt, sondern wird vom OS (DOS/Win) geliefert.



  • In den Funktionen vom int 21h ist praktisch die gesamte DOS Standard-API zusammengefasst.
    Dh. es laesst sich damit so ziemlich alles machen, was das DOS halt so kann - Dateisystemoperationen (Datei-I/O; Verzeichnisse erstellen/loeschen/wechseln, usw.), Bildschirmausgabe, Tastatureingaben, drucken, Programmsteuerung (beenden, starten, TSR, usw.)... ...
    Grafik kann DOS an sich uebrigens nicht. 😉



  • das gibbet schon
    such mal nach "dos in the box" oder "bochs"
    das erste würd ich dir für spiele empfehlen...ist glaub ich auch mit SDL geschrieben :p


Log in to reply