Re: 十三誡增修--01:你不可以使用尚未給予適當初值的變數

看板C_and_CPP作者 (「雄辯是銀,沉默是金」)時間9年前 (2016/05/12 13:09), 編輯推噓1(106)
留言7則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《wtchen (沒有存在感的人)》之銘言: : 標題: 十三誡增修--01:你不可以使用尚未給予適當初值的變數 : 時間: Thu May 12 00:01:20 2016 : : 例如全域變數(global variable)或帶有static修飾字者, : 其初值為定值(最自然的初值就是0)。 : (但是有些MCU 編譯器不理會這個規定,所以還是請養成設定初值的好習慣) : → descent: bss 在 dos 時代也有, 怎麼會是 linux 特有, 05/12 12:29 : → descent: 可以反組譯看 asm 檔案, 即可確認 bss 的存在。 05/12 12:29 : 推 loveflames: dos有我倒是不知道,windows的PE沒有就是 05/12 12:33 $ cat a.cpp int abc, xyz; int main() { abc=5; xyz=15; return 0; } 從這 dump pe http://pedump.me/ https://lh3.googleusercontent.com/-yLMyneGPUW4/VzQOvqM9cPI/AAAAAAABXjU/PNjfd7jf4F4cPibAUOg8CNjlbzKZIF7dACCo/s800/pe.JPG
一樣有顯示 .bss section, raw size 是 0, 不知道是不是我認知的哪個意思? 我是用 cygwin g++ 編譯的。 pe 我不熟悉, 但如果沒有 bss section 那還蠻特別的。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.98.177.194 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1463029786.A.708.html

05/12 13:20, , 1F
我在XP時代經常玩ollydbg,沒看到有bss,未初始跟初始
05/12 13:20, 1F

05/12 13:21, , 2F
data都放一起
05/12 13:21, 2F

05/12 20:16, , 3F
file 有沒有 bss 不重要啊,那個區域有東西描述大小多少
05/12 20:16, 3F

05/12 20:17, , 4F
就可以了。PE 是 SizeOfRawData 表示 initialized data
05/12 20:17, 4F

05/12 20:18, , 5F
的大小,然後 .data 的 VirtualSize 減掉 SizeOfRawData
05/12 20:18, 5F

05/12 20:19, , 6F
就是拿來放要自動清成 0 的變數吧,進入 main() 之前把它
05/12 20:19, 6F

05/12 20:19, , 7F
清成 0 就好了。單純就標記的方式不同而已 XD
05/12 20:19, 7F
文章代碼(AID): #1ND10QS8 (C_and_CPP)
文章代碼(AID): #1ND10QS8 (C_and_CPP)