\section{Overview} The decompilation process consists of a few different steps: \begin{itemize} \item Disassembly \item Code flow analysis \item Code generation \end{itemize} Of these steps, the code flow analysis is engine-independent, while disassembly and code generation require engine-specific code. \subsection{Reading guide} Names used in code are written in a \code{monospaced typewriter font}. Actual code snippets have basic syntax highlighting on a light gray background, and lines are numbered, like below: \begin{C++} \begin{lstlisting} #include int main(int argc, char **argv) { printf("Hello world!"); return 0; } \end{lstlisting} \end{C++} In this document, the terms \emph{control flow analysis} and \emph{code flow analysis} are used interchangably. \subsection{Limitations} The decompiler is targeted for stack-based instruction sets, and may contain assumptions to that effect. If you want to add an engine which does not use a stack-based instruction set, parts of this document may not apply directly, and additional work to the generic parts may be necessary.