2016-12-25 68 views
0

我組裝了一個簡單的「Hello,world」程序並使用TCC鏈接它,之後我得到了4196字節的可執行文件。在最小的動態鏈接ELF程序中需要哪些部分?

該方案有31個部分:['', '.text', '.data', '.bss', '.symtab', '.strtab', '.rel.text', '.rodata', '.rodata.cst4', '.note.GNU-stack', '.init', '.rel.init', '.gnu.linkonce.t.__x86.get_pc_thunk.bx', '.fini', '.rel.fini', '.text.unlikely', '.text.__x86.get_pc_thunk.bx', '.eh_frame', '.rel.eh_frame', '.preinit_array', '.init_array', '.fini_array', '.interp', '.dynsym', '.dynstr', '.hash', '.dynamic', '.got', '.plt', '.rel.got', '.shstrtab']。我覺得對於這樣一個簡單的二進制文件來說真的很重要 - 在我的程序運行中哪些實際上是必需的?

這裏的源代碼,我編譯的方式:

 extern printf 
     global main 

     section .data 
msg: db "Hello World!", 0 

     section .text 
main: 
     ;; puts (msg) 
     push msg 
     call printf 
     add esp, 4 

     ;; return 0 
     mov eax, 0 
     ret 

NASM main.asm中-f ELF32 & & TCC main.o -o主要

測試上32bit/ubuntu:16.04泊塢窗圖片。

注意:這個問題不同於this one,因爲我不是在尋找張力很大的Linux ELF,而是一個允許我調用動態符號的Linux ELF。我相信由於動態鏈接的性質,我需要一些額外的部分。

+1

向我們展示* objdump *(或類似的)的源代碼和輸出,而不是base64編碼的二進制。你在使用CRT嗎?調試符號? –

+0

@MargaretBloom:編輯了這個問題。 – d33tah

+1

[可用的ELF可執行文件需要哪些部分?](http://stackoverflow.com/questions/3832801/what-sections-are-required-for-a-usable-elf-executable) –

回答

1

我相信由於動態鏈接的本質,我需要一些額外的部分。

你的信念是錯誤的。 部分是在運行時需要的,只有的事。

可運行動態鏈接的ELF二進制文件將至少包含一個PT_LOAD段,PT_INTERP段和PT_DYNAMIC段。

相關問題