C++ FAQ Celebrating Twenty-One Years of the C++ FAQ!!!
(Click here for a personal note from Marshall Cline.)
Section 38:
[38.4] How can I decompile an executable program back into C++ source code?

You gotta be kidding, right?

Here are a few of the many reasons this is not even remotely feasible:

  • What makes you think the program was written in C++ to begin with?
  • Even if you are sure it was originally written (at least partially) in C++, which one of the gazillion C++ compilers produced it?
  • Even if you know the compiler, which particular version of the compiler was used?
  • Even if you know the compiler's manufacturer and version number, what compile-time options were used?
  • Even if you know the compiler's manufacturer and version number and compile-time options, what third party libraries were linked-in, and what was their version?
  • Even if you know all that stuff, most executables have had their debugging information stripped out, so the resulting decompiled code will be totally unreadable.
  • Even if you know everything about the compiler, manufacturer, version number, compile-time options, third party libraries, and debugging information, the cost of writing a decompiler that works with even one particular compiler and has even a modest success rate at generating code would be significant — on the par with writing the compiler itself from scratch.

But the biggest question is not how you can decompile someone's code, but why do you want to do this? If you're trying to reverse-engineer someone else's code, shame on you; go find honest work. If you're trying to recover from losing your own source, the best suggestion I have is to make better backups next time.

(Don't bother writing me email saying there are legitimate reasons for decompiling; I didn't say there weren't.)