MyDisassembler is your go-to tool for mastering X86-64 machine codes and assembly language. Built from scratch in C++, it enables learners to disassemble binary files and explore their assembly code intricacies. With support for advanced disassembly strategies and ELF format parsing, you're well-equipped to delve into low-level programming. Join the community and enhance your skills.
MyDisassembler is a cutting-edge disassembler for X86-64 that has been meticulously developed from scratch using C++. This project serves as an exceptional educational tool designed to help learners grasp the fundamentals of X86-64 machine codes, assembly language, ELF format, and disassembly methodologies.
Whether you are diving into the world of low-level programming or seeking to understand the structure and execution of binaries, MyDisassembler provides the resources you need. Discover the complexities of binary files and enhance your knowledge of assembly code with ease.
Key Features
- From Scratch Implementation: MyDisassembler stands out for its unique implementation entirely in C++, allowing for a clearer understanding of disassembly functionality.
- Disassembly Strategies: The tool supports both linear sweeping and recursive descent disassembly strategies, offering flexibility in how disassembly is approached.
- Precision Handling: It accurately processes most basic operations, ensuring reliable analysis of binary files.
- ELF Header Parsing: For those interested in in-depth analysis, MyDisassembler can parse ELF headers, providing vital insights into binary files.
Usage Example
Once you have set up MyDisassembler, disassembling a binary file is straightforward. Here’s a quick example of how to use the tool:
./build/script/mydisas example/jmp.o
The output will present the assembly code in a structured format:
section: .text ----
40 <_start>:
40: mov eax 0x00000000 ( b8 0 0 0 0 )
45: cmp eax 0x00 ( 83 f8 0 )
48: jz 4e <zero_label> ; relative offset = 4 ( 74 4 )
4a: jmp 52 <end_label> ; relative offset = 6 ( eb 6 )
4c: jmp 40 <_start> ; relative offset = -14 ( eb f2 )
4e <zero_label>:
4e: push rsp ( 54 )
4f: xor eax eax ( 31 c0 )
51: ret ( c3 )
52 <end_label>:
52: push rdi ( 57 )
53: xor ecx ecx ( 31 c9 )
55: ret ( c3 )
Future Improvements
MyDisassembler is continually evolving, with exciting plans for future enhancements, including:
- Expanding test coverage to bolster reliability.
- Adding support for VEX Prefix.
- Incorporating additional instructions such as floating-point operations.
- Introducing support for AT&T syntax.
Contributions to MyDisassembler are encouraged, as we strive to make this tool even better for everyone venturing into the realm of disassembly!