2014-02-06 38 views

回答

0

.section僞似乎是指令的定義與名稱和/或標誌一節有什麼區別。 .data是初始化數據的預定義部分。

這只是一個猜測,但我認爲.section .data可能是一個接一個的兩個部分:第一個是沒有標記且沒有內容的未命名,另一個是.data部分。

+0

根據'objdump','.section僞.data'創建名爲'.data'單個部分從源結束。 –

0

爲什麼大寫?

大會的指示似乎基於爲區分大小寫:

  • 快速編譯測試
  • docs saying「這個名字的其餘部分是字母,通常是小寫。」
  • 我在read.c
    • 源的解釋這binutils的使用上都指示和指令TOLOWER如果TC_CASE_SENSITIVE未定義
    • git grep說是所有archs的情況下,除了metag 2.25

現在爲.data vs .section .data

文檔

docs for .section說:

此指令僅支持實際支持任意命名段的目標;例如,對於a.out目標,即使使用標準的a.out部分名稱,也不會被接受。

所以這是不太便攜,更可配置的,因爲你可以通過自定義的標誌,以它的論據

.section name [, "flags"[, @type[,flag_specific_arguments]]] 

實證檢驗

一個快速檢查,以控制截面屬性GAS 2.24 ELF Linux x86-64顯示它們爲簡單輸入提供相同的輸出:

aS:

.data 
    i: .int 1 

b。S:

.section .data 
    i: .int 1 

比較:

as -o a.o a.S 
as -o b.o b.S 
cmp a.o b.o 
echo $? 

的源代碼

對於ELF,.section它是由config/obj-elf.c#obj_elf_section()

.data處理由read.c#s_data處理。

TODO:如果.section .data不帶任何參數確實相同.data或不

相關問題