The structure of a decompiler is presented, along with a thorough description of the different modules that form part of a decompiler, and the type of analyses that are performed on the machine code to regenerate high-level language code. The phases of the decompiler have been grouped into three main modules: front-end, universal decompiling machine, and back-end. The front-end is a machine dependent module that performs the loading, parsing and semantic analysis of the input program, as well as generating an intermediate representation of the program. The universal decompiling machine is a machine and language independent module that performs data and control flow analysis of the program based on the intermediate representation, and the program''s control flow graph. The back-end is a language dependent module that deals with the details of the target high-level language.
['Cristina Cifuentes', 'K. John Gough']
Decompilation of binary programs