1

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

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 得到的。这是什么意思?(那个结构实例将从节开头的偏移量 0x190 开始.FLASH_RAM?)

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

4

1 回答 1

2

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

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

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

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

于 2013-10-06T22:43:36.480 回答