medusa
An open source interactive disassembler
Table of Contents
Loading contents...
README.md
Medusa
Medusa is a disassembler designed to be both modular and interactive.
It runs on Windows and Linux, it should be the same on OSX.
This project is organized as a library. To disassemble a file you have to use
medusa_text or qMedusa.
Build-bot
+--------+-------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
| branch | Travis | AppVeyor |
+========+=============================================================+===============================================================================================+
| dev | |unix_build| | |windows_build| |
+--------+-------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
Prerequisites
Medusa requires the following libraries: boost >= 1.55 <http://www.boost.org>
(system, filesystem, thread, date_time), OGDF <http://www.ogdf.net>
(required git), and Qt5 >= 5.2 <http://qt-project.org>
for the GUI.
You also need CMake <http://www.cmake.org>
for compilation and a C++11 compiler (VS2015 update 2 on Windows).
Git is optional but allows to clone remote repository for specific features, see Compilation/Options.
Feature
+-------------------------------------------------------------------------------------------+
| Loader |
+---------+---------+--------+--------+---------+-------------------------------------------+
| Name | Mapping | Import | Export | Symbols | Notes |
+=========+=========+========+========+=========+===========================================+
| ELF | yes | yes | no | no | Some kind of reloc are not handled |
+---------+---------+--------+--------+---------+-------------------------------------------+
| PE | yes | yes | yes | no | Reloc are not handled |
+---------+---------+--------+--------+---------+-------------------------------------------+
| Mach-O | yes | yes | no | no | - Doesn’t support FAT binary |
| | | | | | - on X86, esi as glbptr is not handled |
+---------+---------+--------+--------+---------+-------------------------------------------+
| GameBoy | yes | yes | yes | yes | - GameBoy Color registers are not handled |
| | | | | | - All mappers are not handled |
+---------+---------+--------+--------+---------+-------------------------------------------+
| ST62ROM | yes | yes | yes | yes | |
+---------+---------+--------+--------+---------+-------------------------------------------+
+----------------------------------------------------------------+
| Architecture |
+------+---------+-------------+----------+----------------------+
| Name | Mode | Disassembly | Semantic | Notes |
+======+=========+=============+==========+======================+
| x86 | 16-bit | yes | partial | |
+------+---------+-------------+ | |
| x86 | 32-bit | yes | | Support until SEE4.2 |
+------+---------+-------------+ | |
| x86 | 64-bit | yes | | |
+------+---------+-------------+----------+----------------------+
| z80 | gameboy | yes | yes | |
+------+---------+-------------+----------+----------------------+
| avr8 | | no | no | Broken |
+------+---------+-------------+----------+----------------------+
| arm | normal | partial | partial | |
+------+---------+-------------+----------+ |
| arm | thumb | partial | no | |
+------+---------+-------------+----------+ |
| arm | thumb2 | partial | no | |
+------+---------+-------------+----------+----------------------+
| st62 | | yes | partial | |
+------+---------+-------------+----------+----------------------+
+--------------------------------------------------------------------------+
| Tool |
+--------+---------------+---------+-------+---------+----------+----------+
| Name | interactivity | Comment | Label | Graph | Database | Notes |
+========+===============+=========+=======+=========+==========+==========+
| qt | partial | yes | yes | yes | yes | |
+--------+---------------+---------+-------+---------+----------+----------+
| text | no | no | no | no | yes | |
+--------+---------------+---------+-------+---------+----------+----------+
+----------------+
| Binding |
+--------+-------+
| Name | Notes |
+========+=======+
| Python | WIP |
+--------+-------+
+------------------------------------+
| Database |
+------+---------+------+------------+
| Name | Save | Load | Notes |
+======+=========+======+============+
| text | yes | yes | Incomplete |
+------+---------+------+------------+
+------------------+
| Operating System |
+---------+--------+
| Name | Notes |
+=========+========+
| UNIX | WIP |
+---------+ |
| Windows | |
+---------+--------+
Roadmap
Each versions of Medusa bring a new specific feature.
- 0.1 the beginning of the project
- 0.2 new qt interface
- 0.3 flow graph
- 0.4 load/save database
- 0.5 semantic support
- 0.6 better python binding
- 0.7 debugger
Compilation
First off, you need boost libraries; you can either download a built version or compile yourself. Boost is available here <http://www.boost.org/users/history/version_1_55_0.html>
_
Now, make sure you have installed Qt5 if you need a graphical user interface (and I’m pretty sure you do ;)). Medusa requires at least the version 5.2, be sure to pick the good version on the official website <http://qt-project.org/downloads>
_ or use your package manager.
Finally, we’re ready to retrieve and compile medusa:
.. code-block:: bash
git clone https://github.com/wisk/medusa.git
mkdir build
cd build
# UNIX users should define CMAKE_BUILD_TYPE e.g. -DCMAKE_BUILD_TYPE=Release to compile Medusa with optimization
cmake -DBOOST_ROOT:PATH=
# for UNIX users
make && cd bin && ./qMedusa
# for Windows users
explorer Medusa.sln
Note: If CMake is unable to find Boost on Windows, try to define BOOST_LIBRARYDIR. This variable must be set to the library directory (e.g.: C:\boost_1_55_0\lib64-msvc-14.0).
In my configuration, QT5_CMAKE_PATH is set to /usr/lib/cmake on ArchLinux and C:\Qt\5.6\msvc2015_64\lib\cmake on Windows.
For Windows users, you should probably add -G”Visual Studio 14 Win64” where 14 is your Visual Studio version and Win64 if you build medusa in 64-bit.
To run the Qt interface on Windows, you may have to add the folder %QTDIR%\bin to your %PATH% and copy the folder %QTDIR%\plugins\platforms.
By default, Medusa searches modules in the current folder, so you should run medusa executables from the folder where modules are located (e.g. build/bin on UNIX or build\bin\{Debug,Release,…} on Windows).
Options
+-------------------------+---------------+-----------------------------------------------------------------------------+
| Name | Default value | Meaning |
+=========================+===============+=============================================================================+
| MEDUSA_BUILD_TOOLS | TRUE | Compile tools |
+-------------------------+---------------+-----------------------------------------------------------------------------+
| MEDUSA_BUILD_TESTS | TRUE | Compile tests |
+-------------------------+---------------+-----------------------------------------------------------------------------+
| MEDUSA_CMAKE_USE_COTIRE | FALSE | Use cotire for building |
+-------------------------+---------------+-----------------------------------------------------------------------------+
| MEDUSA_BUILD_WITH_OGDF | FALSE | Add OGDF project and build it, this library allows qMedusa to display graph |
+-------------------------+---------------+-----------------------------------------------------------------------------+
| MEDUSA_MODULES_TO_BUILD | “all” | Semicolon-separated list of modules to build, or “all” |
+-------------------------+---------------+-----------------------------------------------------------------------------+
Screenshots
Main interface
.. image:: https://raw.github.com/wisk/medusa/dev/img/shots/main_interface.png
Control flow graph
.. image:: https://raw.github.com/wisk/medusa/dev/img/shots/cfg.png
Interactivity
.. image:: https://raw.github.com/wisk/med
... Content truncated. Click "See More" to view the full README.
Tool Information
Author
wisk
Project Added On
May 26, 2025
License
Open Source