2025-05-28 14:13:12 +09:00
2025-05-28 14:13:12 +09:00
2025-05-28 14:13:12 +09:00
2025-05-07 22:46:58 +09:00
2025-05-14 20:55:30 +09:00
2025-05-14 20:55:30 +09:00
2025-05-28 14:13:12 +09:00

minix-8086-rs

minix-8086-rs is a Rust-based toolchain for analyzing and interpreting 16-bit 8086 binaries, made with the intention of interpreting binaries compiled for MINIX.

It includes:

  • 📦 a.out Parser: Parses legacy MINIX executables.
  • 🛠 8086 Disassembler: Parses 16-bit instructions into an IR and prints them in a objdump(1)-style fashion.
  • 💻 8086 Interpreter: Interprets the 8086 instructions, i.e., the MINIX binary.

Usage

To compile and run the tool, use Cargo:

cargo build --release

Or run it directly:

cargo run -- --help

Run with debug output:

RUST_LOG=debug cargo run -- interpret -p ./a.out

CLI Options:

$ cargo run -- --help
Simple program to disassemble and interpret 8086 a.out compilates, e.g. such for MINIX 
                                                                                       
Usage: minix-8086-rs [OPTIONS] <COMMAND>                                               
                                                                                       
Commands:                                                                              
  disasm     Disassemble the binary into 8086 instructions                             
  interpret  Interpret the 8086 instructions                                           
  help       Print this message or the help of the given subcommand(s)                 
                                                                                       
Options:                                                                               
  -p, --path <PATH>  Path of the binary                                                
  -h, --help         Print help                                                        
  -V, --version      Print version                                                     

Status

This project is under active development and primarily used by me to explore some Intel disassembly and learn some more Rust. Expect bugs and some missing features. I mainly test with 'official' binaries from the MINIX source tree.

Documentation

The documentation of the project itself can be accessed by using cargo doc.

$ cargo doc
$ firefox target/doc/minix_8086_rs/index.html 

For the implementation of all instructions I used the Intel "8086 16-BIT HMOS MICROPROCESSOR" Spec, as well as this overview of all Opcode variants used in conjunction with this decoding matrix.

FAQ

Why hassle with interpretation and not just emulate 8086?

For once, this project stemmed from a university exercise about the 8086 instruction set and disassembly. An interpreter was the logical (?) next step. Maybe I add 8086 emulation some day.

Why no nom?

There is no real reason, I just wanted to try to implement most parts myself, even if it meant more boilerplate code. I used nom extensivly in the past and I just wanted to see what it would be like without that crate. In hindsight, using nom would have been the cleaner option, but hey, something I only learned by not using nom for once.

Description
No description provided
Readme 248 KiB
Languages
Rust 99.5%
Python 0.5%