View Single Post
  #42  
Old 09-28-2004, 17:21
archaios
 
Posts: n/a
Decompilation: On the Technical Infeasability

It is computationally infeasible to decompile arbitrary bytecode output back to C++, except in certain (isolated) special instances, such as targeting a subset of C++, and targeting a specific architecture and compiler. In the case of VMs, such as Java and Flash, it is possible due to the (relatively limited) nature of the output bytecode. In the case of C++, the myriad of possible compilation options, optimization, debugging code, etc. complicates matters enormously; what's more, there is significant data loss through discarded variable names in the interest of size, etc. Decompilation is thus an NP-complete problem that can only be partially solved through the use of O(n^2) algorithms; that this is verifiable has been demonstrated on several occasions in respected computational and information theory journals.

Though many have strived to produce such a result, the room for leeway is slight, and (generally) does not work on arbitrary, but rather specially-constructed programs in a very limited way. The entire methodology is flawed; the most effective way to obtain lost source code is to glean understanding from the underlying assembly code and then recreating it through existing programming knowledge.

Sincerely,
-archaios
Reply With Quote