Öffnen. Verstehen. Beobachten. Zurückübersetzen.
Dismonite liest ein Programm (x86, x64, ARM32/Thumb-2, ARM64/AArch64), verfolgt seinen Code, benennt Sprungziele, Importe und Texte und zeigt,
was darin steht – und es führt das Programm im Debugger aus, ohne dass Quelltext nötig wäre. Der Export
als .asm ergibt beim Übersetzen mit dem Assembler von Asmonite wieder dieselbe Datei, Byte für Byte.
Ein kleines, portables Programm: entpacken, starten, fertig.
Version 0.7.6 (Testversion) · Windows 10/11 · 2.1 MB · keine Installation · kostenlos · kein Tracking · Dismonite liegt im selben ZIP wie Asmonite
start, Sprungziele und Adressen als Labels.
Von der fremden EXE bis zu einem Quelltext, der wieder übersetzt werden kann – und dazwischen ein Debugger.
Verfolgt den Code ab Einsprungpunkt, Exporten und TLS-Callbacks (PE) bzw. CS:IP (MZ) und ab den Relokationszielen; was Code ist, wird als Code gezeigt, der Rest als Daten.
Sprungziele, Funktionen und Daten bekommen Namen, die man umbenennen kann. Strg+Klick springt zum Ziel, Alt+← zurück, Strg+R zeigt alle Verweise.
PE-Header, Sections, Importe, Exporte, Ressourcen, ELF-Program-Header und -Symbole werden Feld für Feld mit Größe und Namen als Kommentar gezeigt.
Zeichenketten-Tabellen (RT_STRING) werden Text für Text erkannt, mit Label str_<Nummer>. Eine Konstante vor einem Aufruf, der eine Meldung lädt, zeigt den Text als Hinweis.
Der Export als .asm trägt Labels, Kommentare und Markierungen und ergibt mit asmoc wieder dieselbe Datei – für x86, x64, ARM Thumb-2 und ARM64. Bei 32-Bit-Windows-Programmen wahlweise mit if / else / endif statt cmp und Sprung, wo der Assembler dieselben Bytes daraus macht, auch if zero auf den Flags und Schleifen mit do / while (im 32-Bit-dcc32 9.090 if und 1.134 Schleifen).
Elemente als Code, Byte, Word, Dword, Qword, ASCII oder UTF-16 markieren, Kommentare und Kommentarzeilen setzen. Alles liegt in <programm>.dmon neben dem Programm.
Haltepunkte, Step Over/Into, Run to Cursor, Pause. Register, Stack und Speicher sind immer sichtbar; geänderte Werte werden rot. Wo das Programm anhält, wird Code – die Analyse wächst mit.
Steht das Programm vor einem Sprung, den es gleich nimmt (bei einem bedingten nur, wenn die Bedingung erfüllt ist), sagt die Zeile, ob es nach oben oder nach unten geht, und wohin.
Im Reiter Info erklärt ein Tastendruck den Befehl, die importierte Windows-Funktion mit ihren Parametern oder den DOS-Interrupt. Deutsch und Englisch; die Info folgt dem Cursor.
| Programm | Disassembler | Debugger |
|---|---|---|
| Windows x86 (PE) | ✓ mit Export | direkt auf diesem Rechner |
| Windows x64 (PE32+) | ✓ mit Export | auf diesem Rechner, über den Hilfsserver asmodbgx64 als Kindprozess |
| Windows on ARM (ARM32/Thumb-2) | ✓ mit Export | auf einem Windows-on-ARM-Rechner (Server asmodbg, ssh oder direkt im Netz) |
| Windows ARM64 (PE32+) | ✓ mit Export | auf einem Windows-on-ARM64-Rechner (Server asmodbg64, ssh, direkt oder lokal) |
| DOS (MZ, COM) | ✓ 16 Bit, Segment:Offset | in QEMU mit FreeDOS, startet von selbst |
| ARM-Linux (ELF, 32 Bit) | ✓ | über gdbserver in Raspberry Pi OS unter QEMU |
Für alle, die ein Programm verstehen wollen, dessen Quelltext sie nicht haben.
.asmVom ZIP zum ersten Haltepunkt in einer ausführbaren Datei – mit dem mitgelieferten Beispiel.
Dismonite.exe starten. Keine Installation; Datei > Öffnen beginnt im Programmordner.examples\demo.exe öffnen. Ein kleines Programm: zählt von 1 bis 5 und ruft printf auf..asm, das asmoc wieder zur selben Datei übersetzt.Weitere Beispiele im ZIP: examples\dos\HELLO.EXE (DOS, QEMU), examples\winarm\pe_arm32_hello_world.asm (Windows on ARM) und examples\arm64\a64asm_hello.asm (ARM64), die Asmonite mit F9 zu Programmen baut, die Dismonite öffnet.
Der Export ist kein Anhaltspunkt, den man von Hand nacharbeiten muss: er lässt sich übersetzen.
align, Nullbytes zu einem Elementdb-Zeilen, jede Zeile wird zur Kontrolle zurückübersetzt
align.
Eine ausführbare Datei beobachten – ohne Quelltext, auf Windows, DOS und ARM.
Startet das Programm direkt unter Windows. Haltepunkte, Step Over/Into, Run to Cursor, Pause; die Konsole des Programms erscheint in der Ausgabe.
Startet QEMU mit FreeDOS von selbst; 16-Bit-Register, Adressen als Segment:Offset. Ein zweiter Lauf startet im laufenden QEMU.
Lädt das Programm per ssh in den Raspberry-Pi-Gast und debuggt es über gdbserver. Läuft kein Gast, startet Dismonite ihn nach Rückfrage.
Kopiert das 32-Bit-ARM-Programm auf einen echten Windows-on-ARM-Rechner und debuggt es dort über den kleinen Server asmodbg – entweder über ssh oder direkt im Netz mit einem Kopplungscode. „Search LAN“ findet laufende Server im lokalen Netz.
Startet das 64-Bit-Programm auf diesem Rechner; das kleine Hilfsprogramm asmodbgx64 läuft als Kindprozess. Register rax…r15, Stack und Speicher mit 64-Bit-Adressen.
Debuggt auf einem Windows-on-ARM-Rechner über den Server asmodbg64 – ssh, direkt im Netz oder lokal, wenn Dismonite selbst dort läuft. Register x0…x30, sp, pc, Flags.
.dmon gespeichert
demo.exe ohne Quelltext im Debugger – angehalten nach dem ersten printf: rechts Register und Stack, unten der Speicher der Daten-Section und die Ausgabe „Number 1“.
hello-arm im Raspberry-Pi-Gast, nach Step Over über printf – ARM-Register, Stack ab sp und der Speicher dort.
Die wichtigsten Befehle auf einen Blick. Die Debug-Tasten sind in Dismonite und Asmonite gleich.
| Taste | Debuggen und Hilfe |
|---|---|
| F1 | Befehlsinfo: Befehl, Funktion, Interrupt |
| F5 | Haltepunkt umschalten |
| F9 | Starten / Fortsetzen |
| F8 / F7 | Step Over / Step Into |
| F4 | Run to Cursor |
| Strg+F2 | Debug-Sitzung beenden |
| Strg+F · F3 | Suchen · weitersuchen |
| Strg+G | Gehe zu Adresse |
| Taste | Analyse |
|---|---|
| C | als Code markieren |
| B W D Q | Byte, Word, Dword, Qword |
| A / U | ASCII- / UTF-16-Text |
| ; / Enter | Kommentar / Kommentarzeile davor |
| N | Label umbenennen |
| Strg+R | Verweise auf diese Stelle |
| Strg+F3 | nächster Text |
| Alt+← / Alt+→ | zurück / vor |
Dismonite liegt zusammen mit Asmonite in einem ZIP-Archiv – entpacken und starten, ohne Installation. Das ZIP liegt auf asmonite.com.
Dismonite (Disassembler und Debugger) und Asmonite (Editor, Assembler, Debugger), asmoc (Assembler auf der Kommandozeile), die QEMU-Skripte für FreeDOS und Raspberry Pi OS, die Debug-Server asmodbg, asmodbg64 und asmodbgx64 (Windows on ARM, ARM64, x64), die Befehlsinfo (Deutsch und Englisch) und Beispiele für Windows (x86, x64), DOS und ARM (Thumb-2, ARM64).
<programm>.dmon neben dem untersuchten Programm.127.0.0.1. Zum Debuggen auf Windows on ARM verbindet es sich nur mit dem Rechner, den du angibst; „Search LAN“ fragt dafür einmalig per UDP im lokalen Netz.certutil -hashfile Asmonite-0.7.6.zip SHA256 – sie muss mit dem Wert oben übereinstimmen.