汕頭建設(shè)吧百度貼吧seo外包優(yōu)化公司
1. asm文件
????????asm是匯編語言源程序的擴(kuò)展名,.asm文件是以asm作為擴(kuò)展名的文件,是匯編語言的源程序文件。匯編語言(Assembly Language)是面向機(jī)器的程序設(shè)計(jì)語言,是利用計(jì)算機(jī)所有硬件特性并能直接控制硬件的語言。在匯編語言中,用助記符(Memoni)代替操作碼,用地址符號(hào)(Symbol)或標(biāo)號(hào)(Label)代替地址碼。這樣用符號(hào)代替機(jī)器語言的二進(jìn)制碼,就把機(jī)器語言變成了匯編語言。
2. bin文件
????????bin文件是二進(jìn)制文件,是文件格式binary的縮寫,后綴名為".bin"的文件,表式它是binary格式。通常來說,它的內(nèi)容是機(jī)器代碼,匯編語言編譯后的結(jié)果。
注意:CPU執(zhí)行 bin只需要將程序加載到其起始地址,即可執(zhí)行。uboot和Linux kernel啟動(dòng)時(shí)沒有ELF Loader,所以燒在flash上的文件只能是raw bin,即鏡像文件image
BIN文件是 raw binary 文件,這種文件只包含機(jī)器碼。
BIN文件(也叫鏡像文件)中的所有數(shù)據(jù)都是機(jī)器可以執(zhí)行的指令碼、指令參數(shù)或者常量數(shù)據(jù),不包含其它調(diào)試信息。加載到內(nèi)存或者Nor FLASH等支持XIP(就地執(zhí)行)的存儲(chǔ)器中規(guī)定好的加載地址之后直接從規(guī)定好的運(yùn)行地址開始運(yùn)行即可。例如單片機(jī)中燒寫的都是bin文件,以STM32為例,其片內(nèi)Nor FLASH的起始地址也是代碼的加載(燒寫)地址為0x08000000。上電復(fù)位或者手動(dòng)復(fù)位之后,程序計(jì)數(shù)器PC指向單片機(jī)的復(fù)位異常的中斷向量地址0x08000004的位置,單片機(jī)從復(fù)位開始運(yùn)行。
3. hex文件
????????hex全稱baiIntel HEX,是可以燒寫到單片機(jī)中,被單片機(jī)執(zhí)行的一種文件格式。通常用于傳輸將被存于ROM或者EPROM中的程序和數(shù)據(jù)。是由一行行符合Intel HEX文件格式的文本所構(gòu)成的ASCII文本文件。大多數(shù)EPROM編程器或模擬器使用Intel HEX文件,其記錄由對(duì)應(yīng)機(jī)器語言碼和/或常量數(shù)據(jù)的十六進(jìn)制編碼數(shù)字組成。
4. elf文件
? ? elf是Linux的主要可執(zhí)行文件格式,二進(jìn)制文件。 elf文件除了機(jī)器碼外,還包含其它額外的信息,如段的加載地址,運(yùn)行地址,重定位表,符號(hào)表等。
注意:?CPU執(zhí)行elf程序則需要一個(gè)ELF Loader, gcc編譯出來的是elf文件,objcpy將elf文件轉(zhuǎn)換為bin文件
????????ELF文件除了機(jī)器碼外,還包含其它額外的信息,如段的加載地址,運(yùn)行地址,重定位表,符號(hào)表等。
????????ELF文件相當(dāng)于是對(duì)bin文件的一個(gè)包裝和解釋,不僅僅包含程序的機(jī)器碼,還包含加載地址、運(yùn)行地址和調(diào)試信息等,使得運(yùn)行操作系統(tǒng)(帶MMU的CPU運(yùn)行的具有虛擬地址/內(nèi)存映像功能的OS,如Linux、Windows)的機(jī)器中的ELF Loader模塊能夠根據(jù)elf頭信息創(chuàng)建一個(gè)新進(jìn)程并加載elf文件中的機(jī)器碼到該進(jìn)程的虛擬內(nèi)存中去。例如在Linux系統(tǒng)上運(yùn)行l(wèi)s命令,Linux系統(tǒng)會(huì)在環(huán)境變量中定義了的文件夾中找到可執(zhí)行文件“l(fā)s”,然后系統(tǒng)創(chuàng)建一個(gè)新的進(jìn)程以及映射虛擬內(nèi)存空間,然后ELF Loader會(huì)將可執(zhí)行文件“l(fā)s”加載到虛擬內(nèi)存空間中去并開始執(zhí)行開進(jìn)程。(注意,虛擬地址空間也物理地址空間的尋址空間是一樣的,32位CPU的有4G的尋址空間,64位的有好多G的尋址空間,但是并不是所有虛擬地址空間中的地址都能訪問,MMU只會(huì)映射一部分虛擬地址空間到物理地址空間,如果訪問沒有映射的虛擬地址空間,就會(huì)出現(xiàn)內(nèi)存訪問錯(cuò)誤Segmentation Fault)
所以ELF文件的體積比對(duì)應(yīng)的BIN文件要大。
因?yàn)閑lf文件中包含了bin文件內(nèi)容外的其它信息。