基于linux程序中段的學(xué)習(xí)總結(jié)詳解
更新時間:2013年05月23日 16:16:08 作者:
本篇文章是對linux程序中段的學(xué)習(xí)進行了詳細的總結(jié)與分析,需要的朋友參考下
linux程序的段陸陸續(xù)續(xù)接觸過一些,今天適當?shù)目偨Y(jié)一下,時間倉促,總結(jié)的比較零散。
linux 段:
text:已編譯程序的機器代碼。
.rodata:只讀數(shù)據(jù)。printf中的格式串,或者開關(guān)語句的跳轉(zhuǎn)表。
data:已初始化的全局變量。
bss:未初始化的全局變量。
symtab:符號表。
注意:
1、如果定義一個全局變量,int i = 0;它被初始化為0,但是,它卻不是放在data段中的,而是放在bss段中的。因為編譯器可能會做一些優(yōu)化,如果初始化為0,則它會將它等同于未初始化的變量。這樣的可能要求他會將所有未初始化的全局變量(bss段)初始化為0?!沁@個可能會和編譯器有關(guān)系。
2、對于static全局變量,它在符號表中有一個屬性表示他是local的,不是global。local的符號式不允許被其他的文件引用的。
3、static定義的局部變量,編譯器會把它作為static全局變量來處理。它在符號表中是出現(xiàn)的(局部變量是不出現(xiàn)的)。唯一不同的是,它會把它在符號表中的名字改掉,一般會增加一個后綴:“.1788”。用這種方法來防止和其他的全局變量重名。而且也可以防止對它的調(diào)用。
4、段是有對齊的。如果定義一個char字符,會發(fā)現(xiàn)它有時會增加四個字節(jié),之后定義,段大小便不再增加。
5、查看程序段的工具包括:readelf,objdump(加上-t可以查看變量屬于哪個段),size(可以查看各個段的大小。)
linux 段:
text:已編譯程序的機器代碼。
.rodata:只讀數(shù)據(jù)。printf中的格式串,或者開關(guān)語句的跳轉(zhuǎn)表。
data:已初始化的全局變量。
bss:未初始化的全局變量。
symtab:符號表。
注意:
1、如果定義一個全局變量,int i = 0;它被初始化為0,但是,它卻不是放在data段中的,而是放在bss段中的。因為編譯器可能會做一些優(yōu)化,如果初始化為0,則它會將它等同于未初始化的變量。這樣的可能要求他會將所有未初始化的全局變量(bss段)初始化為0?!沁@個可能會和編譯器有關(guān)系。
2、對于static全局變量,它在符號表中有一個屬性表示他是local的,不是global。local的符號式不允許被其他的文件引用的。
3、static定義的局部變量,編譯器會把它作為static全局變量來處理。它在符號表中是出現(xiàn)的(局部變量是不出現(xiàn)的)。唯一不同的是,它會把它在符號表中的名字改掉,一般會增加一個后綴:“.1788”。用這種方法來防止和其他的全局變量重名。而且也可以防止對它的調(diào)用。
4、段是有對齊的。如果定義一個char字符,會發(fā)現(xiàn)它有時會增加四個字節(jié),之后定義,段大小便不再增加。
5、查看程序段的工具包括:readelf,objdump(加上-t可以查看變量屬于哪個段),size(可以查看各個段的大小。)
相關(guān)文章
vsftp上傳553 Could not create file錯誤解決
本篇文章給大家分享了在vsftp上傳文件的時候出現(xiàn)了553 Could not create file錯誤,針對這個錯誤我們給出了解決辦法,一起學(xué)習(xí)下。2017-12-12使用iptable和Firewalld工具來管理Linux防火墻連接規(guī)則
今天小編就為大家分享一篇關(guān)于使用iptable和Firewalld工具來管理Linux防火墻連接規(guī)則的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-09-09ubuntu中swap(虛擬內(nèi)存)設(shè)置方法
這篇文章主要介紹了ubuntu中swap(虛擬內(nèi)存)設(shè)置方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06