2013-10-06 129 views
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文档?)

+0

写一些C表示“&my_struct_inst”,将其编译为程序集并查看代码。 –

+0

你的意思是在运行时打印实例的地址吗? – Bush

+0

这就是我的意思。我认为答案3),但也许我误解了你的问题。 –

回答

2

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

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

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

objdump的“-t”将列出其地址的所有全局符号和部分属于太。你可以用任何交叉编译的objdump来代替“objdump”。