基於linux程式中段的學習總結詳解

來源:互聯網
上載者:User

linux程式的段陸陸續續接觸過一些,今天適當的總結一下,時間倉促,總結的比較零散。
linux 段:
text:已編譯器的機器代碼。
.rodata:唯讀資料。printf中的格式串,或者開關語句的跳轉表。
data:已初始化的全域變數。
bss:未初始化的全域變數。
symtab:符號表。
注意:
1、如果定義一個全域變數,int i = 0;它被初始化為0,但是,它卻不是放在data段中的,而是放在bss段中的。因為編譯器可能會做一些最佳化,如果初始化為0,則它會將它等同於未初始化的變數。這樣的可能要求他會將所有未初始化的全域變數(bss段)初始化為0。——但是這個可能會和編譯器有關係。
2、對於static全域變數,它在符號表中有一個屬性工作表示他是local的,不是global。local的符號式不允許被其他的檔案引用的。
3、static定義的局部變數,編譯器會把它作為static全域變數來處理。它在符號表中是出現的(局部變數是不出現的)。唯一不同的是,它會把它在符號表中的名字改掉,一般會增加一個尾碼:“.1788”。用這種方法來防止和其他的全域變數重名。而且也可以防止對它的調用。
4、段是有對齊的。如果定義一個char字元,會發現它有時會增加四個位元組,之後定義,段大小便不再增加。
5、查看程式段的工具包括:readelf,objdump(加上-t可以查看變數屬於哪個段),size(可以查看各個段的大小。)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.