我有linux CPP编译的二进制文件。基于类(符号)名称,我如何知道运行时符号的大小,它将占用的内存;使用任何反汇编工具?还是其他任何方法?
(它可能指向额外的堆内存,这不是我关心的问题。但是应该计算存储指向堆的指针的类成员。)
答案 0 :(得分:3)
需要使用调试符号编译二进制文件以查找该信息。您可以从DWARF调试符号中读取信息。这是一个演示:
鉴于此代码:
#include <iostream>
struct MyType {
int a, b,c;
float d;
};
int main(int argc, char *argv[])
{
struct MyType t;
std::cout << sizeof(t);
}
您可以使用g++ -g demo.c
使用
转储调试符号 objdump -W ./a.out
会有像
这样的部分 <1><13c7>: Abbrev Number: 20 (DW_TAG_structure_type)
<13c8> DW_AT_name : (indirect string, offset: 0x8af): MyType
<13cc> DW_AT_byte_size : 16
<13cd> DW_AT_decl_file : 1
<13ce> DW_AT_decl_line : 2
<13cf> DW_AT_sibling : <0x13fc>
我们去了,MyType的大小为16。
如果二进制文件没有调试符号,那你就错了。您必须知道代码处理您感兴趣的类型大小的位置,反汇编二进制文件,找到代码的那一部分。