An uncompiler or recompiler as it is also called. (Re)creates high level code from the generated low level or MachineCode.

JAD is a popular decompiler for JavaLanguage

For the limits of such an approach see the remarks on BidirectionalCompiler

CategoryCompilers