天天看點

elf檔案和bin檔案差別

ELF檔案格式是一個開放标準,各種UNIX系統的可執行檔案都采用ELF格式,它有三種不同的類型:

  • 可重定位的目标檔案(Relocatable,或者Object File)
  • 可執行檔案(Executable)
  • 共享庫(Shared Object,或者Shared Library)

        ELF格式提供了兩種不同的視角,連結器把ELF檔案看成是Section的集合,而加載器把ELF檔案看成是Segment的集合。

        有一篇文章介紹elf檔案的格式以及加載過程介紹的很詳細,可以看一下,https://blog.csdn.net/daocaokafei/article/details/109735123https://blog.csdn.net/daocaokafei/article/details/109735123

BIN檔案是直接的二進制檔案,内部沒有位址标記。bin檔案内部資料按照代碼段或者資料段的實體空間位址來排列。一般用程式設計器燒寫時從00開始,而如果下載下傳運作,則下載下傳到編譯時的位址即可。

在Linux OS上,為了運作可執行檔案,他們是遵循ELF格式的,通常gcc -o test test.c,生成的test檔案就是ELF格式的,這樣就可以運作了,執行elf檔案,則核心會使用加載器來解析elf檔案并執行。

在Embedded中,如果上電開始運作,沒有OS系統,如果将ELF格式的檔案燒寫進去,包含一些ELF檔案的符号表字元表之類的section,運作碰到這些,就會導緻失敗,如果用objcopy生成純粹的二進制檔案,去除掉符号表之類的section,隻将代碼段資料段保留下來,程式就可以一步一步運作。

      elf檔案裡面包含了符号表等。BIN檔案是将elf檔案中的代碼段,資料段,還有一些自定義的段抽取出來做成的一個記憶體的鏡像。

      并且elf檔案中代碼段資料段的位置并不是它實際的實體位置。他實際實體位置是在表中标記出來的。

繼續閱讀