elf文件到底怎么執(zhí)行 elf文件不能執(zhí)行?
elf文件不能執(zhí)行?是lz s機后綴6?modbo4.0的固件在港版上有bug,這是可能的原因之一。文件頭是什么?首先,解釋為什么可執(zhí)行文件需要一個頭文件。對于可執(zhí)行文件,操作系統(tǒng)在執(zhí)行它之前需要知
elf文件不能執(zhí)行?
是lz s機后綴6?modbo4.0的固件在港版上有bug,這是可能的原因之一。
文件頭是什么?
首先,解釋為什么可執(zhí)行文件需要一個頭文件。
對于可執(zhí)行文件,操作系統(tǒng)在執(zhí)行它之前需要知道:
1、要看操作系統(tǒng)版本,比如有的只能在DOS下運行,有的可以在Windows下運行;有些必須在64位環(huán)境下運行等等。
2.它的入口在哪里?不是所有可執(zhí)行文件的入口都在文件的前面,也有在中間或者后面的,所以需要描述一些東西。
3.其中哪部分是代碼,哪部分是數據,因為通常對于代碼來說,代碼部分應該是只讀的,數據部分是可讀寫的。
4.哪些數據需要初始化為0?通常在可執(zhí)行文件中,有一個叫BSS段的部分,需要操作系統(tǒng)在加載可執(zhí)行文件時清除BSS。
5.運行時的虛擬地址是什么,如果無法加載到指定的地址(重定向表),操作系統(tǒng)該怎么辦。
6.初始寄存器值是多少?
……
因此,為了描述這些信息,有必要在可執(zhí)行文件中添加一個文件頭。否則,操作系統(tǒng)將無確加載和運行可執(zhí)行文件。
那么有沒有一個可執(zhí)行文件不 不需要標題?答案是肯定的。
我記得兩件事:
首先是DOS時代的COM文件。這個文件的條目是它的第一個字節(jié)。大部分寄存器都是自己初始化的,大小不允許超過一個16位的段大小(64KB),所以功能非常有限。
另一個是嵌入式開發(fā)用的BIN文件,其條目是它的第一個字節(jié)。有些BIN文件可以自己初始化段寄存器,所以基本上可以認為是沒有文件頭的可執(zhí)行代碼。但是由于BIN沒有統(tǒng)一的規(guī)范,所以很難說一個BIN文件有沒有頭。
然后,解釋為什么不同系統(tǒng)的文件頭不一樣。
一方面,由于歷史原因,不同的操作系統(tǒng)各自為戰(zhàn),造成了不同的格式。但更本質的原因是不同的操作系統(tǒng)環(huán)境。例如,在WindowsXP32位系統(tǒng)中,在虛擬地址空間中,用戶地址占用0x00000000-0x7FFFFFFF的地址范圍,內核空間地址是0x80000000-0xFFFFFFFF的地址范圍,用戶空間是2GB,內核空間是2GB,通常是默認的。但是,在Linux中,用戶空間是3GB,內核空間是1GB。這種內存分配的差異導致很多事情都不一樣,包括可執(zhí)行文件的入口地址范圍、可用內存等。因此,Linux中的ELWindows中的f文件和PE文件不能定義的完全一樣。和PE格式都包含一個DOS文件頭,這在Linux中是沒有的。在PE中,要指定Windows子系統(tǒng)的類型,Linux肯定不會支持。而且,DLL庫和SO庫是不同的。所以,基于以上原因,不同操作系統(tǒng)的可執(zhí)行文件頭文件格式是不一樣的。