In addition to the correct answer by Tim:
For deeper understanding of the problem, you should first understand that compilation is a process resulting in the loss of information
. For example, if you change the text formatting of your source code, if won't effect the output executable, so the information on the formatting is lost. Moreover, if the programming system does not support Reflection
, if you rename any variable or function which is not exported, it won't change the compiling code as well; and renaming of a local variable may not change the result as well, even in presence of Reflection or RTTI. Please see:http://en.wikipedia.org/wiki/Reflection_%28computer_programming%29
The ability to invert some transformation over the information, be it compilation, decomlilation, compression, calculation of a hash function in general case is not absolute, but may have stochastic properties and is governed by the laws of entropy, which is some measure which can only grow with evolution of data or remain the same, in that sense that an occasion of entropy reduction has low probability, in all more or less complex cases — extremely low. This is analogous to the entropy in thermodynamics, which has very similar stochastic nature.
The entropy aspects of information lie in the very basis of the informational theory, informatics and computer science and are of fundamental importance for many fields of development, notably cryptography and numerical simulation. For further reading, please see:http://en.wikipedia.org/wiki/Entropy_%28information_theory%29