亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: [結(jié)貼]程序的二進(jìn)制格式里面包含.data段.code段.bss段,這個(gè)是x86的規(guī)定還是ELF格式? [打印本頁]

作者: wqrocdr    時(shí)間: 2015-04-29 13:10
標(biāo)題: [結(jié)貼]程序的二進(jìn)制格式里面包含.data段.code段.bss段,這個(gè)是x86的規(guī)定還是ELF格式?
本帖最后由 wqrocdr 于 2015-04-30 16:46 編輯

是ELF文件標(biāo)準(zhǔn)格式的規(guī)定呢, 還是x86體系結(jié)構(gòu)對(duì)于可執(zhí)行程序段劃分的規(guī)定的?

看起來windows/linux上面的各種可執(zhí)行實(shí)體都需要包含這樣的幾個(gè)段,而且分段的方式和名字也幾乎一樣,看起來好像不是操作系統(tǒng)規(guī)定的。

那是什么規(guī)定的?
作者: nswcfd    時(shí)間: 2015-04-29 15:10
應(yīng)該不是elf標(biāo)準(zhǔn)規(guī)定的,因?yàn)楦鱾(gè)section的名字是存在elf文件的.shstrtab這個(gè)section里面的。
作者: wqrocdr    時(shí)間: 2015-04-29 15:48
nswcfd 發(fā)表于 2015-04-29 15:10
應(yīng)該不是elf標(biāo)準(zhǔn)規(guī)定的,因?yàn)楦鱾(gè)section的名字是存在elf文件的.shstrtab這個(gè)section里面的。


謝謝,那么這個(gè)elf的shstrtable規(guī)范,有沒有說,.data段一定要存放那種在編譯時(shí)就聲明了而且分配了空間的變量,而.bss段一定要存放聲明了但是編譯時(shí)并不分配空間的變量?
如果有這樣的要求的話,在同一個(gè)操作系統(tǒng)上,不同編譯器產(chǎn)生的elf文件就是可以交叉使用的了? 如果沒有這樣的規(guī)定,那么就不能交叉使用,對(duì)嗎?

有沒有具體的一點(diǎn)的說法?
作者: wqrocdr    時(shí)間: 2015-04-30 09:15
自己頂一下
作者: nswcfd    時(shí)間: 2015-04-30 09:43
我沒有看過elf的規(guī)范,但是我做過一個(gè)實(shí)驗(yàn),把一個(gè)elf文件里的.bss字符串替換為.BSS(sed s/bss/BSS/),elf文件同樣可以正常執(zhí)行的。

粗略瀏覽了一下exec/load_elf_binray路徑,總體感覺是section叫什么名字不重要,關(guān)鍵是section的屬性(也就是readelf -S 所顯示的type和flag字段)。
Section Headers:
  [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
  [13] .text             PROGBITS        00000000004003e0 0003e0 000218 00  AX  0   0 16
  [24] .data             PROGBITS        0000000000600928 000928 000004 00  WA  0   0  4
  [25] .bss             NOBITS          0000000000600930 00092c 000010 00  WA  0   0  8
Key to Flags:  W (write), A (alloc), X (execute), M (merge), S (strings)  I (info), L (link order), G (group), x (unknown)  O (extra OS processing required) o (OS specific), p (processor specific)

當(dāng)然這也不是絕對(duì)的,比如kernel moudle的.ko文件,里面有很多section的名字就是被os定死的(比如.modinfo字段)

至于交叉編譯的問題,還是請(qǐng)其他高人回答吧。
作者: wqrocdr    時(shí)間: 2015-04-30 11:46
nswcfd 發(fā)表于 2015-04-30 09:43
我沒有看過elf的規(guī)范,但是我做過一個(gè)實(shí)驗(yàn),把一個(gè)elf文件里的.bss字符串替換為.BSS(sed s/bss/BSS/),el ...


謝謝,你說的exec/load_elf_binray這個(gè)是一個(gè)系統(tǒng)文件嗎? 我沒有找到啊。
還請(qǐng)指教!
作者: nswcfd    時(shí)間: 2015-04-30 16:04
exec/load_elf_binary表達(dá)的是execve系統(tǒng)調(diào)用在kernel里面的代碼路徑,具體的說是

sys_execve => do_execve => search_binary_handler =>  fmt->load_binary => load_elf_binary




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2