Skip to content
/ epanos Public

ElectroPaint Automatic No-source Object reaSsembler (a MIPS to C decompiler)

License

Notifications You must be signed in to change notification settings

drvink/epanos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EPANOS

the ElectroP*aint Automatic No-source Object reaS**sembler

a backronym; see THANKS.md

Who?

http://github.com/drvink

What?

This is a very dumb MIPS to C static translator. Consider it a proof of concept, as it has successfully worked on at least one non-trivial program.

When?

From December 2013 to March 2014.

Where?

Tokyo.

How?

You will need a version of IDA that is not yet public. Whatever version comes after 6.5 should contain all the fixes that are needed to produce the code used in ElectroPortis.

The decompiler depends on these libraries:

The decompiler is not a push-button solution: some small annotations to the IDA database were needed to produce fully-working code. If you wish to use it on your own target, you will probably want to modify it to do data/bss segment extraction in a saner way. The easiest thing would probably be to just lift them out and treat them opaquely, i.e. as a char[], and then handle endianness issues accordingly.

Why?

People have wanted ElectroPaint (the real thing, not a clone) on something other than IRIX for longer than your author (of the decompiler) has been alive. Someone had to do it.

Python?

    __           __
   /..\        /| |'-.
   \O_/.       || |   |   OH WOW
   _.'  \ _    \|_|_.-'  DYNAMIC TYPING
.='.__/  \ |     _) (_
     |\_. \| |"""""""""|  LET ME OUT
     /`  .'| |         |   OF THIS
     \ \"""; |         |
     )\ \  | |.-------.|
     '`_`  ' "         "

This was an experiment. The two options that did not require writing bindings for IDA were C++ and Python. I don't think I'll use Python again for personal projects in the future, and I should have written IDA bindings to a statically typed language (other than C++).