This is just a demonstration of what sleigh-rs and sleigh2rust are able to accomplish.
The code in each folder was generated by parsing the sleigh files from ghidra using sleigh-rs, then generating the rust code with sleigh2rust. The sleigh3test uses this crate to execute basic disassembly tests.
This project still in an early PoC (Proof-of-Concept) stage.
Each CPU is located in its own crate, they are compiled as dylib.
The create dyn-test includes multiple tests that will load and test each cpu architecture.
The objective of this project is to implement an MVP disassembler/emulator. Currently the code generated is unecessarelly verbose and slow, because this is not the goal at this stage of the project.
List of CPUs and variants:
✅: Implemented 🚧: Under Construction
Family | Variant | Disassembler |
---|---|---|
68000 | 68020 | ✅ |
68000 | 68030 | ✅ |
68000 | 68040 | ✅ |
68000 | coldfire | ✅ |
HCS12 | HCS12 | ✅ |
Atmel | avr8 | ✅ |
Atmel | avr8e | ✅ |
Atmel | avr32a | 🚧 |
Atmel | avr8xmega | 🚧 |
Atmel | avr8eind | 🚧 |
8048 | 8048 | 🚧 |
PA-RISC | pa-risc32be | ✅ |
RISCV | riscv.ilp32d | ✅ |
RISCV | riscv.lp64d | ✅ |
V850 | V850 | ✅ |
6502 | 6502 | ✅ |
6502 | 65c02 | ✅ |
CR16 | CR16B | ✅ |
CR16 | CR16C | ✅ |
Z80 | z80 | ✅ |
Z80 | z180 | ✅ |
HCS08 | HC05 | ✅ |
HCS08 | HC08 | ✅ |
HCS08 | HCS08 | ✅ |
tricore | tricore | ✅ |
MC6800 | 6805 | ✅ |
MC6800 | 6809 | ✅ |
MC6800 | H6309 | ✅ |
MCS96 | MCS96 | ✅ |
TI_MSP430 | TI_MSP430 | 🚧 |
TI_MSP430 | TI_MSP430X | 🚧 |
CP1600 | CP1600 | ✅ |
M8C | m8c | ✅ |
8051 | 8051 | ✅ |
8051 | 80251 | ✅ |
8051 | 80390 | ✅ |
8051 | mx51 | ✅ |
8085 | 8085 | ✅ |
MIPS | mips32be | ✅ |
MIPS | mips32le | ✅ |
MIPS | mips32R6be | ✅ |
MIPS | mips32R6le | ✅ |
MIPS | mips64be | ✅ |
MIPS | mips64le | ✅ |
AARCH64 | AARCH64 | ✅ |
AARCH64 | AARCH64BE | ✅ |
AARCH64 | AARCH64_AppleSilicon | ✅ |
JVM | JVM | ✅ |
Dalvik | Dalvik_Base | ✅ |
Dalvik | Dalvik_ODEX_KitKat | ✅ |
Dalvik | Dalvik_DEX_KitKat | ✅ |
Dalvik | Dalvik_DEX_Lollipop | ✅ |
Dalvik | Dalvik_DEX_Marshmallow | ✅ |
Dalvik | Dalvik_DEX_Nougat | ✅ |
Dalvik | Dalvik_DEX_Oreo | ✅ |
Dalvik | Dalvik_DEX_Pie | ✅ |
Dalvik | Dalvik_DEX_Android10 | ✅ |
Dalvik | Dalvik_DEX_Android11 | ✅ |
Dalvik | Dalvik_DEX_Android12 | ✅ |
PowerPC | ppc_32_be | ✅ |
PowerPC | ppc_32_le | ✅ |
PowerPC | ppc_32_quicciii_be | ✅ |
PowerPC | ppc_32_quicciii_le | ✅ |
PowerPC | ppc_32_4xx_be | ✅ |
PowerPC | ppc_32_4xx_le | ✅ |
PowerPC | ppc_64_be | ✅ |
PowerPC | ppc_64_le | ✅ |
PowerPC | ppc_64_isa_be | ✅ |
PowerPC | ppc_64_isa_le | ✅ |
PowerPC | ppc_64_isa_altivec_be | ✅ |
PowerPC | ppc_64_isa_altivec_le | ✅ |
PowerPC | ppc_64_isa_altivec_vle_be | ✅ |
PowerPC | ppc_64_isa_vle_be | ✅ |
x86 | x86 | ✅ |
x86 | x86_64 | ✅ |
Sparc | SparcV9_32 | ✅ |
Sparc | SparcV9_64 | ✅ |
ARM | ARM4_be | ✅ |
ARM | ARM4_le | ✅ |
ARM | ARM4t_be | ✅ |
ARM | ARM4t_le | ✅ |
ARM | ARM5_be | ✅ |
ARM | ARM5_le | ✅ |
ARM | ARM5t_be | ✅ |
ARM | ARM5t_le | ✅ |
ARM | ARM6_be | ✅ |
ARM | ARM6_le | ✅ |
ARM | ARM7_be | ✅ |
ARM | ARM7_le | ✅ |
ARM | ARM8_be | ✅ |
ARM | ARM8_le | ✅ |
SuperH4 | SuperH4_be | ✅ |
SuperH4 | SuperH4_le | ✅ |
SuperH | sh-1 | ✅ |
SuperH | sh-2 | ✅ |
SuperH | sh-2a | ✅ |
Toy | toy_builder_be_align2 | ✅ |
Toy | toy_builder_le_align2 | ✅ |
Toy | toy_builder_le | ✅ |
Toy | toy_be_posStack | ✅ |
Toy | toy_builder_be | ✅ |
Toy | toy_wsz_be | ✅ |
Toy | toy_wsz_le | ✅ |
Toy | toy_be | ✅ |
Toy | toy_le | ✅ |
Toy | toy64_be | ✅ |
Toy | toy64_le | ✅ |
Toy | toy64_be_harvard | ✅ |
PIC | pic12c5xx | ✅ |
PIC | pic16c5x | ✅ |
PIC | pic16 | ✅ |
PIC | pic16f | ✅ |
PIC | pic17c7xx | ✅ |
PIC | pic18 | ✅ |
PIC | PIC24E | ✅ |
PIC | PIC24F | ✅ |
PIC | PIC24H | ✅ |
PIC | dsPIC30F | ✅ |
PIC | dsPIC33C | ✅ |
PIC | dsPIC33E | ✅ |
PIC | dsPIC33F | ✅ |