Question: Does anyone know how convert C++ code to assembly code and then do the reverse?
The forward way is very easy:

```
g++ -S

```

I want to analyze the output and see if it has been compiled correctly (Just for curiosity now, but it can have some applications). However, my knowledge of assembly is very limited and the output is hard to understand (This is especially true if I use optimizations (-O) or compile with debug info (-g) ).

Is there a de-assembler for C++ (GCC) to produce C++ code? If not, is there any intermediate representation that I can compile C++ code into and then back from it?

There seems to be some ways for converting C++ to C [here](https://stackoverflow.com/questions/5050349/is-there-a-way-to-compile-c-to-c-code). Does GCC have anything for this?

Answer: 
De-compiling assembly language back to C++ is possible (e.g., with [HexRays](http://www.hex-rays.com/products/decompiler/index.shtml)), within some constraints -- primarily that although the C++ you get out will reflect the basic algorithms correctly, it probably won't look much like the original source code (though C++ name mangling does help maintain something closer to the original than you usually get with many other languages).
Use `objdump -d` to disassemble a compiled object. Other than that you can't get much more information back out of it (and definitely not the original source). I'd trust the compiler if I were you.