views:

241

answers:

6
A: 

Object files contain binary data - the only higher level that most compilers can output is assembler, so if you can't read that you are out of luck. However, take a look at this question for more info in this area.

anon
A: 

You can inspect the layout of binaries and their contents using map files. Use /MAP for VC and -Map or --print-map for gcc.

Georg Fritzsche
A: 

Your question is a little confusing.

If you want to see the result of preprocessing with MSVC, you can use /E, /P/, or /EP.

There's an undocumented option in MSVC to show the data layout of structures and classes. I'm having trouble finding it right now.

Adrian McCarthy
>There's an undocumented option in MSVC to show the data layout of structures and classes. I'm having trouble finding it right now.this is exactly what i am looking for!
I finally managed to dig up those switches: `/d1reportSingleClassLayoutXXX` and `/d1reportAllClassLayout`.
j_random_hacker
+4  A: 

For GCC compiled executables, checkout Pahole. It will show you how the compiler laid out your structs/classes and whether or not they have "holes" in them. Holes are padding due to memory alignment rules.

ceretullis
(+1) naice tool
Hassan Syed
A: 

A constructor is just another function (unless it's in-lined). Object files contain a lot of info for the linker; so you should be able to find the function in the .a file (the function names will be mangled though).

Hassan Syed
+3  A: 

For Visual C++:

I finally managed to dig up the (well-hidden!) undocumented compiler flags that MSVC++ supports using information from here and here. Here they are:

/d1reportSingleClassLayoutXXX
/d1reportAllClassLayout

(replace XXX with the class name)

j_random_hacker