有没有办法,可能使用nm或gdb,让我创建一个可执行文件包含的所有对象类型的列表?
为了澄清,我有源代码。我需要一种方法来计算运行时使用的所有类/结构大小。所以这可能是一个两部分问题:
答案 0 :(得分:9)
“类型”不是机器代码的属性。它们是高级抽象语言的属性,编译到机器代码中。除非编译器为您恢复有关源程序的信息做出具体安排,否则通常根本不存在类型信息。
答案 1 :(得分:2)
http://www.hex-rays.com/products/ida/index.shtml:DeCompiler for C ++
除非编译好调试信息,否则通常不会从二进制文件中获得好的C ++。准备花费大量的手工劳动来扭转代码。
如果你没有删除二进制文件,那么就有一些希望,因为IDA Pro可以生成类似C的代码供您使用。
答案 2 :(得分:0)
从gdb获取类型列表很容易。您只想先info types
,然后再想ptype
(如果要向下钻取该类型(将其限制为与字符串匹配的类型,只是为了保持较小)即可):
(gdb) info types Q
All types matching regular expression "Q":
File foo.cpp:
Qq;
(gdb) ptype Qq
type = class Qq {
private:
int qx;
public:
Qq(int);
std::__cxx11::string something(std::__cxx11::list<int, std::allocator<int> >);
int getQ(void);
}
sizeof告诉您结构的大小(当然,它是结构本身,因此这可能有用,也可能没有那么有用):
(gdb) p sizeof(Qq)
$1 = 4
(gdb)
您可能想要在脚本中运行gdb并以某种方式解析输出。