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