2010-08-23 29 views
2

我正在使用gdb和libbfd从elf文件中检索全局变量信息并显示它。 我可以从libbfd获得以下数据:全局变量名称,地址和大小。 我使用gdb和gdb \ MI(ptype,whatis,-var-create & -var-list-children)检索变量及其子类型。gdb bfd:获取子变量地址或大小或偏移量

如何从所有孩子的家长处获取地址\尺寸\偏移量?

e.g

type = struct {\n" 
    unsigned char count;\n" 
    unsigned char time;\n 
    }\n 

如果这种类型的变量A是在地址0x000100,我要证明A.count在0x000100与尺寸为0x1和A.time是0x000101与尺寸为0x1。

编辑: 我读过gdb可以读取DWARF信息,但我无法弄清楚如何从gdb获取这些信息。

回答

3

这是我最终做的。 为了得到大小,我用:

p sizeof(A.time) 

,并得到地址我用:

p /a &A.time 

注意:这仅适用于尺寸更大然后1个字节的变量。 为了能够获得位字节的大小和偏移量,我必须根据nabble提供的建议重新编译GDB:Address of bitfield element bug?