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生成a.out文件格式
- 4. 把「時間./a.out」的輸出到可變
- 5. 如何查看a.out文件的內容?
- 6. gcc -pg創建a.out而不是gmon.out
- 7. Solaris:gdb a.out> run>打開子shell?
- 8. 如何使用exec()命令運行a.out
- 9. c編程理解strace -o t.txt ./a.out
- 10. 爲什麼要選擇「a.out文件」而不是「a.out <文件」,反之亦然? C++
- 11. 獲取a.out文件中的符號位置
- 12. 使可執行文件不被命名爲a.out?
- 13. 無法通過Android終端運行a.out文件
- 14. 如何靜態鏈接SDL我的a.out在Linux(Ubuntu的)
- 15. 就BSS,DATA,TEXT段而言,a.out文件包含什麼內容?
- 16. 在另一臺計算機上運行a.out
- 17. 在Linux的特定日期/時間執行a.out
- 18. glibc的檢測*** ./a.out:免費():無效的指針:
- 19. 如何在新的終端窗口中啓動./a.out?
- 20. 獲取由信號SIGSEGV(地址邊界錯誤)終止的「./a.out」
- 21. GETPID()由5或6每次遞增a.out的執行
- 22. 與執行a.out文件(C++)發行的MacOS塞拉利昂10.12.1
- 23. 編譯C++文件時爲什麼命名爲「a.out」?
- 24. 編譯器g ++無法創建a.out文件?
- 25. 爲什麼C代碼在給出./a.out後會暫停?
- 26. 如何將./a.out的結果存儲到文本文件
- 27. 無法讀取終端中由FORTRAN創建的a.out文件?
- 28. 進程地址空間中的.so和a.out文件的多個副本
- 29. 「***堆棧粉碎檢測***:./a.out終止中止(核心轉儲)」 - 陣列內插
- 30. 如何在vim中設置一個熱鍵來保存並運行makefile和./a.out?
你自己對此進行過研究嗎?你沒有說明你擡頭看什麼等等...... – 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