2016-12-25 4 views
0

私はシンプルな "Hello、world"プログラムを組み立て、TCCを使ってそれをリンクしました。その後4196バイトの実行可能ファイルが得られました。最小限の動的リンクELFプログラムにはどのセクションが必要ですか?

プログラムのセクションは、['', '.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ドッカーでテスト画像。

注:この質問は、引っ張りのあるLinux ELFを探すのではなく、動的な記号を呼び出すことができるという点で、this oneとは異なります。ダイナミックリンクの性質上、いくつかのセクションが必要になると思います。

+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バイナリには、少なくとも1つのPT_LOADセグメント、PT_INTERPセグメント、およびPT_DYNAMICセグメントが含まれます。