the 1st edition: 20120217 (5)
the 2nd edition: 20161215 (4)
gcc -g -o bss bss.c
list 0 L128 ~ 130
128 i = 1;
129 80483d7: c7 05 18 a0 04 08 01 movl $0x1,0x804a018
130 80483de: 00 00 00
i 變數會放在 bss section, 而在 linux 下, 這個 bss 位址為 0804a018, 所以 int = 1 就是把 1 寫 4 byte (00 00 00 01) 到 0804a018 這裡就對了。
list 1. L50, L208
50 [26] .bss NOBITS 0804a010 001010 00000c 00 WA 0 0 4
208 69: 0804a018 4 OBJECT GLOBAL DEFAULT 26 i
bss section 始於 0804a010 長度為 c, L 208 指出變數 i 位址為 0804a018, 和上述的組合語言程式碼相呼應。
那 bss 區域怎麼來呢? 在作業系統裡頭有作業系統幫忙處理, 若程式不是由作業系統載入, 而是全部都要自己來要怎麼辦? 由誰來初始化呢? 若是沒有 bss 區域, 用了放在 bss 裡頭的變數, 那會怎樣?
我還在研究中 ...
《
bss section (1)》有了答案。
ref:
linux c 編程 - 一站式學習 (p 237)
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。