日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux下的a.out文件

發(fā)布時間:2024/9/5 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下的a.out文件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
當然這里,我更重要的是強調這個什么段,什么段。這以前就知道。但其實是對一個可以執(zhí)行的c語言程序的分析。就好比你分析一篇作文。有標題。有段落。
.out文件就是擴展名為out的文件,它本身不代表任何信息。在Linux中判斷文件是否是可執(zhí)行文件,首先要看文件的屬性是否是可執(zhí)行的,它沒有一個默認的擴展名表示此文件為可執(zhí)行文件。為了方便,Linux中可執(zhí)行文件一般都是沒有擴展名的。
在使用gcc編程時,沒有指定輸入可執(zhí)行文件名,默認生成可執(zhí)行文件a.out文件。執(zhí)行時必須鍵入命令 ./a.out,即要帶上擴展名,如果鍵入./a 則不正確,因為它尋找a這個文件,而不是a.out這個文件。

a.out是由OMAGIC, NMAGIC, QMAGIC, 或者 ZMAGIC發(fā)展過來的一種可執(zhí)行文件格式.
OMAGIC :在文件頭之后就是各個段,但是部分文本段和數(shù)據(jù)段.
NMAGIC:和OMAGIC差不多,但是數(shù)據(jù)段在代碼段之后加載之后就立即加載數(shù)據(jù)段,并且將代碼段標示位只讀.
ZMAGIC:只是增加了對頁需求的支持.
QMAGIC:這種格式可以將文件頭和代碼段的第一頁合并起來,這樣可以節(jié)省空間.它一般會在虛擬地址的最低地址加載一頁,來處里NULL地址引起的段錯誤.

一個典型的a.out文件由一下7部分組成,按順序有這些段:
exec header:文件頭
???這一段中含有一些參數(shù),內核利用其中一些參數(shù)來把二進制文件加載到內存中并執(zhí)行.ld利用另外一些參數(shù)來連接其它的二進制文件.這個段是唯一含有命令參數(shù)的.

text segment:代碼段
???包括在程序執(zhí)行時加載到內存中的機器碼和相關數(shù)據(jù).有可能是只讀的.

data segment:數(shù)據(jù)段
???包括初始化過的數(shù)據(jù)變量.通常是加載到內存中的可寫去中.

text relocations:代碼重定向
???包含編譯連接二進制文件時的記錄,這些記錄使用來更新代碼段中的指針.

data relocations:數(shù)據(jù)重定向
???和代碼重定向相似,區(qū)別是它針對于數(shù)據(jù)段的指針.

symbol table:符號表
???包含連接器對不同二進制文件中的變量,函數(shù)和地址之間的對應關系的記錄.

string table:字符串表
???包含和符號名字相一致的字符串.

每一種二進制文件都是以這樣的一個數(shù)據(jù)結構開始的:
???????????struct exec {
???????????????????unsigned long???a_midmag;
???????????????????unsigned long???a_text;
???????????????????unsigned long???a_data;
???????????????????unsigned long???a_bss;
???????????????????unsigned long???a_syms;
???????????????????unsigned long???a_entry;
???????????????????unsigned long???a_trsize;
???????????????????unsigned long???a_drsize;
???????????};
a_midmag:保存的是主機字節(jié)序, I由這些宏來訪問其中的部分bit位: N_GETFLAG(), N_GETMID(), N_GETMAGIC(), 由宏 N_SETMAGIC().來設置這個字段.
a_text????代碼段的大小Contains the size of the text segment in bytes.

a_data????數(shù)據(jù)段的大小Contains the size of the data segment in bytes.

a_bss?????bss segment中字節(jié)數(shù)和被內核用來初始化數(shù)據(jù)段之后的BRK (bss = block started by symbol)//這里的理解還是有點問題

a_syms????符號表的大小

a_entry???保存在程序被內核加載到內存中后程序的起始地址,內核由此地址開始執(zhí)行程序

a_trsize 代碼重定向表的大小

a_drsize 數(shù)據(jù)重定向表的大小

轉載于:https://www.cnblogs.com/zhangfeionline/p/5967671.html

總結

以上是生活随笔為你收集整理的linux下的a.out文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。