在与ARM体系结构兼容的ELF文件中查找C结构的地址

时间:2013-10-06 19:26:40

标签: c arm elf abi

在我的项目中,我定义了:(这不是真正的代码 - 用于抽象目的)

typedef struct {
...
} my_struct;

在某些C文件中我声明:

my_struct my_struct_inst;

在其他2个C文件中,我通过声明来使用该结构:

extern my_struct my_struct_inst;

并使用它的内容。

我使用RVCT2.2将该代码编译到ARM并尝试查找该结构的地址:

1)何时将内存分配给my_struct_inst?在编译时间?在运行时间?

2)在反汇编中我可以看到.FLASH_RAM部分(可能是这种数据所属的部分),有一些参考如下: my_struct_inst%0x190 我用IDA得到了它。这是什么意思? (结构实例将从.FLASH_RAM部分的开头偏移0x190开始?)

3)当我写my_struct_inst.some_member时,我是如何准确地访问实际地址(结构实际位于内存中的位置)(我应该阅读一些ABI文档吗?)

1 个答案:

答案 0 :(得分:2)

您的结构的内存将在编译时分配。

地址将由链接描述文件定义。要查看结构的地址(假设它是一个全局变量),您将需要生成的ELF文件(对于此示例,我们将其称为a.elf)。然后运行:

arm-eabi-objdump -t a.elf | grep my_struct_inst

Objdump“-t”将列出所有全局符号及其地址及其所属的部分。您可以用任何交叉编译的objdump替换“objdump”。