开发者

Layout of compiled objects

Is there a way—much like viewing the result of preprocessing with gcc -E—to see what my objects look like once compiled into object files?

I am talking abou开发者_开发技巧t GCC, but a solution including MSVC would be fine.


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)


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.


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.


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.


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


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).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜