青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0

a.out 格式在不同的機(jī)器平臺(tái)和不同的 UNIX 操作系統(tǒng)上有輕微的不同,例如在 MC680x0 平臺(tái)上有 6 個(gè) section。下面我們討論的是最"標(biāo)準(zhǔn)"的格式。

a.out 文件包含 7 個(gè) section,格式如下:exec header(執(zhí)行頭部,也可理解為文件頭部)
text segment(文本段)
data segment(數(shù)據(jù)段)
text relocations(文本重定位段)
data relocations(數(shù)據(jù)重定位段)
symbol table(符號(hào)表)
string table(字符串表)


執(zhí)行頭部的數(shù)據(jù)結(jié)構(gòu):struct exec {
                      unsigned long     a_midmag;      /* 魔數(shù)和其它信息 */
                      unsigned long     a_text;        /* 文本段的長(zhǎng)度 */
                      unsigned long     a_data;        /* 數(shù)據(jù)段的長(zhǎng)度 */
                      unsigned long     a_bss;         /* BSS段的長(zhǎng)度 */
                      unsigned long     a_syms;        /* 符號(hào)表的長(zhǎng)度 */
                      unsigned long     a_entry;       /* 程序進(jìn)入點(diǎn) */
                      unsigned long     a_trsize;      /* 文本重定位表的長(zhǎng)度 */
                      unsigned long     a_drsize;      /* 數(shù)據(jù)重定位表的長(zhǎng)度 */
            };

 

文件頭部主要描述了各個(gè) section 的長(zhǎng)度,比較重要的字段是 a_entry(程序進(jìn)入點(diǎn)),代表了系統(tǒng)在加載程序并初試化各種環(huán)境后開(kāi)始執(zhí)行程序代碼的入口。這個(gè)字段在后面討論的 ELF 文件頭部中也有出現(xiàn)。由 a.out 格式和頭部數(shù)據(jù)結(jié)構(gòu)我們可以看出,a.out 的格式非常緊湊,只包含了程序運(yùn)行所必須的信息(文本、數(shù)據(jù)、BSS),而且每個(gè) section 的順序是固定的。這種結(jié)構(gòu)缺乏擴(kuò)展性,如不能包含"現(xiàn)代"可執(zhí)行文件中常見(jiàn)的調(diào)試信息,最初的 UNIX 黑客對(duì) a.out 文件調(diào)試使用的工具是 adb,而 adb 是一種機(jī)器語(yǔ)言調(diào)試器!

a.out 文件中包含符號(hào)表和兩個(gè)重定位表,這三個(gè)表的內(nèi)容在連接目標(biāo)文件以生成可執(zhí)行文件時(shí)起作用。在最終可執(zhí)行的 a.out 文件中,這三個(gè)表的長(zhǎng)度都為 0。a.out 文件在連接時(shí)就把所有外部定義包含在可執(zhí)行程序中,如果從程序設(shè)計(jì)的角度來(lái)看,這是一種硬編碼方式,或者可稱為模塊之間是強(qiáng)藕和的。在后面的討論中,我們將會(huì)具體看到ELF格式和動(dòng)態(tài)連接機(jī)制是如何對(duì)此進(jìn)行改進(jìn)的。

a.out 是早期UNIX系統(tǒng)使用的可執(zhí)行文件格式,由 AT&T 設(shè)計(jì),現(xiàn)在基本上已被 ELF 文件格式代替。a.out 的設(shè)計(jì)比較簡(jiǎn)單,但其設(shè)計(jì)思想明顯的被后續(xù)的可執(zhí)行文件格式所繼承和發(fā)揚(yáng)。可以參閱 參考資料 16 和閱讀 參考資料 15 源代碼加深對(duì) a.out 格式的理解。 參考資料 12 討論了如何在"現(xiàn)代"的紅帽LINUX運(yùn)行 a.out 格式文件。

 

COFF 文件格式分析

COFF 格式比 a.out 格式要復(fù)雜一些,最重要的是包含一個(gè)節(jié)段表(section table),因此除了 .text,.data,和 .bss 區(qū)段以外,還可以包含其它的區(qū)段。另外也多了一個(gè)可選的頭部,不同的操作系統(tǒng)可一對(duì)此頭部做特定的定義。

COFF 文件格式如下:File Header(文件頭部)
Optional Header(可選文件頭部)
Section 1 Header(節(jié)頭部)
………
Section n Header(節(jié)頭部)
Raw Data for Section 1(節(jié)數(shù)據(jù))
Raw Data for Section n(節(jié)數(shù)據(jù))
Relocation Info for Sect. 1(節(jié)重定位數(shù)據(jù))
Relocation Info for Sect. n(節(jié)重定位數(shù)據(jù))
Line Numbers for Sect. 1(節(jié)行號(hào)數(shù)據(jù))
Line Numbers for Sect. n(節(jié)行號(hào)數(shù)據(jù))
Symbol table(符號(hào)表)
String table(字符串表)


文件頭部的數(shù)據(jù)結(jié)構(gòu):struct filehdr
                 {
                   unsigned short    f_magic;      /* 魔數(shù) */
                     unsigned short    f_nscns;      /* 節(jié)個(gè)數(shù) */
                     long              f_timdat;     /* 文件建立時(shí)間 */
                     long              f_symptr;     /* 符號(hào)表相對(duì)文件的偏移量 */
                     long              f_nsyms;      /* 符號(hào)表?xiàng)l目個(gè)數(shù) */
                     unsigned short    f_opthdr;     /* 可選頭部長(zhǎng)度 */
                     unsigned short    f_flags;      /* 標(biāo)志 */
                 };

 

COFF 文件頭部中魔數(shù)與其它兩種格式的意義不太一樣,它是表示針對(duì)的機(jī)器類型,例如 0x014c 相對(duì)于 I386 平臺(tái),而 0x268 相對(duì)于 Motorola 68000系列等。當(dāng) COFF 文件為可執(zhí)行文件時(shí),字段 f_flags 的值為 F_EXEC(0X00002),同時(shí)也表示此文件沒(méi)有未解析的符號(hào),換句話說(shuō),也就是重定位在連接時(shí)就已經(jīng)完成。由此也可以看出,原始的 COFF 格式不支持動(dòng)態(tài)連接。為了解決這個(gè)問(wèn)題以及增加一些新的特性,一些操作系統(tǒng)對(duì) COFF 格式進(jìn)行了擴(kuò)展。Microsoft 設(shè)計(jì)了名為 PE(Portable Executable)的文件格式,主要擴(kuò)展是在 COFF 文件頭部之上增加了一些專用頭部,具體細(xì)節(jié)請(qǐng)參閱 參考資料 18,某些 UNIX 系統(tǒng)也對(duì) COFF 格式進(jìn)行了擴(kuò)展,如 XCOFF(extended common object file format)格式,支持動(dòng)態(tài)連接,請(qǐng)參閱 參考資料 5。

緊接文件頭部的是可選頭部,COFF 文件格式規(guī)范中規(guī)定可選頭部的長(zhǎng)度可以為 0,但在 LINUX 系統(tǒng)下可選頭部是必須存在的。下面是 LINUX 下可選頭部的數(shù)據(jù)結(jié)構(gòu):typedef struct
            {
                  char     magic[2];    /* 魔數(shù) */
                  char     vstamp[2];    /* 版本號(hào) */
                  char     tsize[4];    /* 文本段長(zhǎng)度 */
                  char     dsize[4];    /* 已初始化數(shù)據(jù)段長(zhǎng)度 */
                  char     bsize[4];    /* 未初始化數(shù)據(jù)段長(zhǎng)度 */
                  char     entry[4];    /* 程序進(jìn)入點(diǎn) */
                  char     text_start[4];         /* 文本段基地址 */
                  char     data_start[4];         /* 數(shù)據(jù)段基地址 */
            }
            COFF_AOUTHDR;

 

字段 magic 為 0413 時(shí)表示 COFF 文件是可執(zhí)行的,注意到可選頭部中顯式定義了程序進(jìn)入點(diǎn),標(biāo)準(zhǔn)的 COFF 文件沒(méi)有明確的定義程序進(jìn)入點(diǎn)的值,通常是從 .text 節(jié)開(kāi)始執(zhí)行,但這種設(shè)計(jì)并不好。

前面我們提到,COFF 格式比 a.out 格式多了一個(gè)節(jié)段表,一個(gè)節(jié)頭條目描述一個(gè)節(jié)數(shù)據(jù)的細(xì)節(jié),因此 COFF 格式能包含更多的節(jié),或者說(shuō)可以根據(jù)實(shí)際需要,增加特定的節(jié),具體表現(xiàn)在 COFF 格式本身的定義以及稍早提及的 COFF 格式擴(kuò)展。我個(gè)人認(rèn)為,節(jié)段表的出現(xiàn)可能是 COFF 格式相對(duì) a.out 格式最大的進(jìn)步。下面我們將簡(jiǎn)單描述 COFF 文件中節(jié)的數(shù)據(jù)結(jié)構(gòu),因?yàn)楣?jié)的意義更多體現(xiàn)在程序的編譯和連接上,所以本文不對(duì)其做更多的描述。此外,ELF 格式和 COFF格式對(duì)節(jié)的定義非常相似,在隨后的 ELF 格式分析中,我們將省略相關(guān)討論。struct COFF_scnhdr
            {
                  char s_name[8];       /* 節(jié)名稱 */
                  char s_paddr[4];      /* 物理地址 */
                  char s_vaddr[4];      /* 虛擬地址 */
                  char s_size[4];         /* 節(jié)長(zhǎng)度 */
                  char s_scnptr[4];     /* 節(jié)數(shù)據(jù)相對(duì)文件的偏移量 */
                  char s_relptr[4];      /* 節(jié)重定位信息偏移量 */
                  char s_lnnoptr[4];    /* 節(jié)行信息偏移量 */
                  char s_nreloc[2];     /* 節(jié)重定位條目數(shù) */
                  char s_nlnno[2];      /* 節(jié)行信息條目數(shù) */
                  char s_flags[4];       /* 段標(biāo)記 */
            };

 

有一點(diǎn)需要注意:LINUX系統(tǒng)中頭文件coff.h中對(duì)字段s_paddr的注釋是"physical address",但似乎應(yīng)該理解為"節(jié)被加載到內(nèi)存中所占用的空間長(zhǎng)度"。字段s_flags標(biāo)記該節(jié)的類型,如文本段、數(shù)據(jù)段、BSS段等。在COFF的節(jié)中也出現(xiàn)了行信息,行信息描述了二進(jìn)制代碼與源代碼的行號(hào)之間的對(duì)映關(guān)系,在調(diào)試時(shí)很有用。
轉(zhuǎn)自:
http://www.360doc.com/content/080313/18/59039_1115300.html

posted on 2009-12-05 23:34 chatler 閱讀(613) 評(píng)論(0)  編輯 收藏 引用 所屬分類: FileFormat
<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺(jué)這個(gè)博客還是不錯(cuò),雖然做的東西和我不大相關(guān),覺(jué)得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品视频在线观看免费| 久久综合婷婷| 日韩视频在线你懂得| 欧美日本一区二区三区| 一本一本a久久| 亚洲天堂网站在线观看视频| 国产欧美日韩精品丝袜高跟鞋| 久久精品99国产精品酒店日本| 性做久久久久久免费观看欧美| 狠狠色狠狠色综合日日五| 欧美精品久久久久久久久久| 免费成人av资源网| 亚洲人成绝费网站色www| 亚洲日本免费电影| 欧美精品免费看| 亚洲欧美一区二区三区久久 | 老司机午夜精品视频| 理论片一区二区在线| 99国内精品久久| 欧美一二区视频| 亚洲精品国产精品久久清纯直播| 一本色道久久88精品综合| 国产一区二区在线免费观看 | 国产精品99久久不卡二区| 国产一级一区二区| 亚洲精品久久久久| 国产婷婷色一区二区三区| 亚洲激情成人在线| 国产一区二区精品久久91| 亚洲精品偷拍| 亚洲国产高潮在线观看| 亚洲性感激情| 亚洲九九爱视频| 久久gogo国模裸体人体| 亚洲午夜电影网| 久久综合激情| 久久精品免费播放| 欧美亚日韩国产aⅴ精品中极品| 美女日韩欧美| 国产日韩精品综合网站| 一二三区精品福利视频| 亚洲日韩欧美视频一区| 久久国产免费| 欧美一区二区三区四区视频| 欧美日韩国产精品成人| 欧美激情一二三区| 在线日韩av片| 久久免费99精品久久久久久| 欧美亚洲视频在线观看| 国产精品久久久久久久久动漫| 亚洲高清免费在线| 亚洲人成人一区二区在线观看| 久久本道综合色狠狠五月| 欧美一区二区三区免费视| 国产精品高潮呻吟久久| 日韩一二三区视频| 正在播放亚洲一区| 欧美精品一区二区三区四区| 亚洲高清不卡在线| 亚洲国产一区二区三区高清| 久久久久国产精品一区二区| 久久久精品动漫| 国产一区在线免费观看| 欧美在线视频不卡| 久久精品在线观看| 黄色亚洲在线| 久久久久久午夜| 欧美96在线丨欧| 亚洲人成久久| 欧美日韩国产综合一区二区| 国产欧美日韩亚洲| 久久综合精品国产一区二区三区| 国产一区二区三区在线观看免费视频 | 亚洲一区二区在线看| 午夜一区二区三区不卡视频| 国产精品毛片大码女人| 午夜视频在线观看一区| 久久亚洲高清| 亚洲日本中文字幕| 国产精品大片免费观看| 亚洲女与黑人做爰| 免费成人在线观看视频| 日韩视频―中文字幕| 欧美日韩免费精品| 亚洲欧美日韩天堂| 欧美风情在线观看| 中文日韩欧美| 国内精品一区二区三区| 嫩草伊人久久精品少妇av杨幂| 亚洲三级网站| 欧美在线视频观看| 亚洲人成亚洲人成在线观看 | 久久久久久久久蜜桃| 亚洲国产99精品国自产| 亚洲一区一卡| 亚洲高清av| 国产精品久久久久久久浪潮网站| 久久国产精品99国产精| 亚洲日本成人女熟在线观看| 欧美一级在线亚洲天堂| 亚洲片区在线| 国产午夜精品全部视频在线播放 | 99re6热只有精品免费观看| 欧美一区永久视频免费观看| 亚洲欧洲另类国产综合| 国产精品视频| 欧美日本在线观看| 久久免费少妇高潮久久精品99| 日韩亚洲欧美成人| 欧美成人乱码一区二区三区| 先锋资源久久| 一区二区黄色| 在线精品高清中文字幕| 国产精品区二区三区日本 | 午夜精品免费| 亚洲美女视频在线免费观看| 麻豆九一精品爱看视频在线观看免费| 亚洲一区二区三区精品在线观看| 亚洲第一区色| 国内在线观看一区二区三区| 国产精品对白刺激久久久| 欧美韩日视频| 美玉足脚交一区二区三区图片| 欧美在线免费观看亚洲| 亚洲一区三区视频在线观看| 99视频+国产日韩欧美| 亚洲福利视频网| 欧美jjzz| 欧美成人午夜77777| 久久综合成人精品亚洲另类欧美 | 亚洲精品在线看| 亚洲国产你懂的| 亚洲高清中文字幕| 又紧又大又爽精品一区二区| 精品999日本| 久久夜色精品国产| 久久精品国产91精品亚洲| 亚洲精品一区二区三区婷婷月 | 欧美日韩亚洲一区二| 媚黑女一区二区| 免费观看不卡av| 免费一区视频| 久久婷婷综合激情| 老司机精品久久| 女同一区二区| 欧美激情2020午夜免费观看| 欧美 日韩 国产在线| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美在线资源| 久久成人18免费观看| 久久精品视频99| 久久亚裔精品欧美| 美女精品在线观看| 欧美精品一区二| 国产精品男gay被猛男狂揉视频| 国产精品伦子伦免费视频| 国产精品欧美一区二区三区奶水| 国产欧美一级| 亚洲成人在线网| 一区二区三区国产在线| 亚洲免费婷婷| 久久米奇亚洲| 亚洲国产另类久久久精品极度| 亚洲精品国产精品乱码不99按摩| 一本色道久久| 久久久国产亚洲精品| 欧美国产日韩一区二区三区| 国产精品国产三级国产普通话蜜臀 | 午夜精品亚洲| 蜜臀99久久精品久久久久久软件 | 葵司免费一区二区三区四区五区| 欧美国产专区| 国产女人aaa级久久久级| 亚洲国产第一页| 亚洲女性裸体视频| 欧美成ee人免费视频| 在线视频精品| 久久婷婷国产综合尤物精品| 欧美日韩在线一二三| 韩日欧美一区| 亚洲图片在区色| 久久天堂国产精品| 一区二区三区不卡视频在线观看 | 久久久久久久精| 欧美日韩亚洲免费| 永久91嫩草亚洲精品人人| 中文欧美日韩| 欧美华人在线视频| 亚洲欧美亚洲| 欧美日韩国产一区精品一区 | 欧美日韩亚洲一区三区| 在线 亚洲欧美在线综合一区| 亚洲欧美日本在线| 亚洲第一黄色网| 欧美在线地址| 国产精品毛片va一区二区三区| 亚洲伦伦在线| 欧美国产先锋| 久久精品夜色噜噜亚洲a∨| 国产精品视频久久|