2013-10-06 79 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」。