Open. Understand. Watch. Turn back into source.
Dismonite reads a program (x86, x64, ARM32/Thumb-2, ARM64/AArch64), follows its code, names jump targets, imports and texts and shows what is in
it – and it runs the program in the debugger, with no source needed. The export as .asm
assembles with the Asmonite assembler into the same file again, byte for byte. A small, portable program:
unpack, start, done.
Version 0.7.6 (test version) · Windows 10/11 · 2.1 MB · no installation · free · no tracking · Dismonite is in the same ZIP as Asmonite
start, jump targets and addresses as labels.
From someone else's EXE to source that assembles again – with a debugger in between.
Follows the code from the entry point, exports and TLS callbacks (PE) or CS:IP (MZ) and from the relocation targets; what is code is shown as code, the rest as data.
Jump targets, functions and data get names you can change. Ctrl+click jumps to the target, Alt+← goes back, Ctrl+R lists all references.
PE header, sections, imports, exports, resources, ELF program headers and symbols are shown field by field with size and name as a comment.
String tables (RT_STRING) are recognized text by text, with the label str_<number>. A constant before a call that loads a message shows the text as a hint.
The export as .asm carries labels, comments and marks and assembles with asmoc into the same file again – for x86, x64, ARM Thumb-2 and ARM64. For 32-bit Windows programs optionally with if / else / endif instead of cmp and a jump, where the assembler makes the same bytes of it, also if zero on the flags and loops with do / while (9,090 if and 1,134 loops in the 32-bit dcc32).
Mark elements as code, byte, word, dword, qword, ASCII or UTF-16, add comments and comment lines. Everything is kept in <program>.dmon next to the program.
Breakpoints, step over/into, run to cursor, pause. Registers, stack and memory are always visible; changed values turn red. Where the program stops becomes code – the analysis grows along.
Where the program stands before a jump it is about to take (a conditional one only if the condition holds), the row says whether it goes up or down, and where to.
In the Info tab one key press explains the instruction, the imported Windows function with its parameters or the DOS interrupt. German and English; the info follows the cursor.
| Program | Disassembler | Debugger |
|---|---|---|
| Windows x86 (PE) | ✓ with export | directly on this computer |
| Windows x64 (PE32+) | ✓ with export | on this computer, through the helper server asmodbgx64 as a child process |
| Windows on ARM (ARM32/Thumb-2) | ✓ with export | on a Windows on ARM computer (server asmodbg, ssh or directly on the network) |
| Windows ARM64 (PE32+) | ✓ with export | on a Windows on ARM64 computer (server asmodbg64, ssh, directly or locally) |
| DOS (MZ, COM) | ✓ 16-bit, segment:offset | in QEMU with FreeDOS, starts by itself |
| ARM Linux (ELF, 32-bit) | ✓ | through gdbserver in Raspberry Pi OS under QEMU |
For everyone who wants to understand a program whose source they do not have.
.asmFrom the ZIP to the first breakpoint in an executable – with the example that comes with it.
Dismonite.exe. No installation; File > Open starts in the program's folder.examples\demo.exe. A small program: counts from 1 to 5 and calls printf..asm that asmoc assembles into the same file again.More examples in the ZIP: examples\dos\HELLO.EXE (DOS, QEMU), examples\winarm\pe_arm32_hello_world.asm (Windows on ARM) and examples\arm64\a64asm_hello.asm (ARM64), which Asmonite builds with F9 into programs Dismonite opens.
The export is not a rough guide that needs rework by hand: it assembles.
align line, zero bytes one itemdb lines, every line is assembled back to check it
align line.
Watch an executable – without source, on Windows, DOS and ARM.
Starts the program directly on Windows. Breakpoints, step over/into, run to cursor, pause; the program's console appears in the output view.
Starts QEMU with FreeDOS by itself; 16-bit registers, addresses as segment:offset. A second run starts in the running QEMU.
Copies the program into the Raspberry Pi guest over ssh and debugs it through gdbserver. If no guest runs, Dismonite asks and starts it.
Copies the 32-bit ARM program to a real Windows on ARM computer and debugs it there through the small server asmodbg – either over ssh or directly on the network with a pairing code. “Search LAN” finds running servers on the local network.
Starts the 64-bit program on this computer; the small helper asmodbgx64 runs as a child process. Registers rax…r15, stack and memory with 64-bit addresses.
Debugs on a Windows on ARM computer through the server asmodbg64 – ssh, directly on the network or locally if Dismonite itself runs there. Registers x0…x30, sp, pc, flags.
.dmon
demo.exe in the debugger without source – stopped after the first printf: registers and stack on the right, below the memory of the data section and the output “Number 1”.
hello-arm in the Raspberry Pi guest, after a step over printf – ARM registers, the stack from sp and the memory there.
The most important commands at a glance. The debug keys are the same in Dismonite and Asmonite.
| Key | Debugging and help |
|---|---|
| F1 | Instruction info: instruction, function, interrupt |
| F5 | Toggle breakpoint |
| F9 | Start / continue |
| F8 / F7 | Step over / step into |
| F4 | Run to cursor |
| Strg+F2 | End the debug session |
| Strg+F · F3 | Find · find next |
| Strg+G | Go to address |
| Key | Analysis |
|---|---|
| C | mark as code |
| B W D Q | byte, word, dword, qword |
| A / U | ASCII / UTF-16 text |
| ; / Enter | Comment / comment line before |
| N | Rename label |
| Strg+R | References to this place |
| Strg+F3 | Next string |
| Alt+← / Alt+→ | Back / forward |
Dismonite is in one ZIP archive together with Asmonite – unpack and start, no installation. The ZIP is on asmonite.com.
Dismonite (disassembler and debugger) and Asmonite (editor, assembler, debugger), asmoc (assembler on the command line), the QEMU scripts for FreeDOS and Raspberry Pi OS, the debug servers asmodbg, asmodbg64 and asmodbgx64 (Windows on ARM, ARM64, x64), the instruction info (German and English) and examples for Windows (x86, x64), DOS and ARM (Thumb-2, ARM64).
<program>.dmon next to the examined program.127.0.0.1. To debug on Windows on ARM it connects only to the computer you name; “Search LAN” asks the local network once by UDP for that.certutil -hashfile Asmonite-0.7.6.zip SHA256 – it must match the value above.