A 'compiler' takes text high-level source code, and turns it into low-level assembly language.

A decompiler takes low-level assembly language and tries to turn it back into high-level source code.

One aspect of a decompiler is getting rid of all register assignments. This is called Register Elimination.

One important concept is the Data Avalanche. This is where data leads to more data, and is essential in a decompiler where data is the currency.

The 'OFFSET CONTAINER' makes it so you can get a bunch of arithmetic assignments and then examine the final Container and extract meaningful code from it.

CPU Encapsulation is where opcodes common to all CPU's are made the same basic opcodes.