\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 <stdio.h>

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.
