a.out?
回答
a.out
格式強制共享庫佔用內存中的固定位置。如果您想分發a.out共享庫,則必須註冊其地址空間。這對性能很有好處,但它並沒有擴展。親自看看how tricky it was(linuxjournal)。相比之下,在ELF中,共享庫可以加載到內存中的任何位置,甚至可以看起來與在同一臺計算機上運行的不同應用程序的地址不同(代碼仍然只能在物理內存中的一個地方有效加載)!爲了實現這一點,在IA-32架構中,必須犧牲一個寄存器(%ebx)。顯示共享庫在ELF中變得更加複雜,但這是編譯器端的複雜性,而不是程序員端。
我會同時知道如何使用ebx之前和之後,以及什麼coff做與elf不同的是 – 2018-02-28 04:56:33
@EvanCarroll原來的問題根本不涉及COFF。您的評論聽起來像是一個新問題,我請您提問。 – 2018-02-28 08:00:42
@EvanCarroll在a.out中,ebx可用作用戶代碼作爲通用寄存器。在x86(32位)ELF ABI中,ebx保存全局偏移表(GOT)的地址,以便它不可用於用戶代碼。葉函數 - 不調用任何其他函數的函數 - 可以保存並使用它,但與被調用程序保存寄存器不同,將它保存到入口以便能夠使用它通常是不夠的。 – 2018-02-28 08:09:39
我記得,a.out格式的原始問題之一是它只支持三個部分:文本,數據和bss。 ELF允許任何數量(或至少更多)。 out的頭部格式很簡單,類似:
word <magic>
word <text size>
word <data size>
word <bss size>
ELF格式,相反,有部分頭文件,名稱,大小等
有更多的部分允許標準節,而且如果我們需要的話,還可以爲我們提供const節,構造函數節,甚至每個函數一節。
這解釋了這些差異,但並未解釋a.out出了什麼問題或爲什麼有更多的段落更好 – 2010-02-28 20:09:00
有點瑣碎--a.out代表彙編器輸出,直到今天,gcc將編譯C代碼並默認命名輸出文件a.out,除非指定了另一個輸出名稱,儘管輸出文件仍然是ELF。這是從代碼被直接轉換爲彙編輸出的日子中保留下來的......很高興看到傳統的精神生活!
希望這會有所幫助, 最好的問候, 湯姆。
- 1. a.out內核空間
- 2. Linux「gdb a.out param1 param2」是否將param1和2傳遞給「gdb」或「a.out」?
- 3. gcc -pg創建a.out而不是gmon.out
- 4. 使用gcc生成a.out文件格式
- 5. Solaris:gdb a.out> run>打開子shell?
- 6. 如何查看a.out文件的內容?
- 7. 在另一臺計算機上運行a.out
- 8. 獲取由信號SIGSEGV(地址邊界錯誤)終止的「./a.out」
- 9. 無法通過Android終端運行a.out文件
- 10. 就BSS,DATA,TEXT段而言,a.out文件包含什麼內容?
- 11. 爲什麼C代碼在給出./a.out後會暫停?
- 12. 如何在新的終端窗口中啓動./a.out?
- 13. glibc的檢測*** ./a.out:免費():無效的指針:
- 14. 無法讀取終端中由FORTRAN創建的a.out文件?
- 15. 如何靜態鏈接SDL我的a.out在Linux(Ubuntu的)
- 16. 與執行a.out文件(C++)發行的MacOS塞拉利昂10.12.1
- 17. 進程地址空間中的.so和a.out文件的多個副本
- 18. 「***堆棧粉碎檢測***:./a.out終止中止(核心轉儲)」 - 陣列內插
- 19. Flex - 使用「-lfl」庫編譯並鏈接lex.yy.c以生成可執行文件a.out
- 20. C使用./a.out <文件名以及如何停止讀取來讀取文件
- 21. 爲什麼有些編譯器使用「a.out」作爲可執行文件的默認名稱?
- 22. 無法打開輸出文件的a.out:權限被拒絕,一個簡單的彙編
- 23. 我怎樣才能給命令行參數,而不使用擴展名,不是./a.out 3 4,但是喜歡./a 3 4
- 24. char指向字符串的指針,然後轉換爲字符串數組。 ***錯誤的`./a.out ':的malloc():內存破壞:0x0900c3b0 ***
- 25. 你會得到一個'aux ps'輸出,其中只有一個終端被打開,而a.out被執行了兩次,但你只調用一次。東西的
- 26. 帶電籬笆庫的gcc不生效
- 27. ocaml的4.01.0→4.02.1,二進制大小變大
- 28. 如何禁用OS X中的.text重定位?
- 29. 燦Ragel執行各個命令解析和拋出錯誤相應
- 30. 你如何獲得在Docker容器中的linux perf工具中工作的調試符號?
你自己對此進行過研究嗎?你沒有說明你擡頭看什麼等等...... – t0mm13b 2010-02-28 19:53:57
是的,我做了一些研究http://en.wikipedia.org/wiki/A.out- 「由於複雜性,Linux向ELF的過渡或多或少地被迫在該平臺上構建a.out共享庫的性質,其中包括需要在中央權威機構中註冊該庫所在的虛擬地址空間,因爲Linux中的a.out ld.so無法重新定位共享庫。由於BSD a.out格式與Linux相比更加靈活,因此各種BSD風格能夠在Linux被迫切換到ELF之後很長時間繼續使用a.out二進制文件。「 – 2010-02-28 20:06:56