간단한 "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
도커에서 테스트 영상.
참고 :이 질문은 tensible Linux ELF를 찾고 있지 않다는 점에서 this one과 다르지만 동적 기호를 호출 할 수있는 질문입니다. 나는 동적 링크의 본질 때문에 일부 여분의 섹션이 필요하다고 생각합니다.
* objdump * (또는 유사)의 소스 코드와 출력을 표시하고 base64 인코딩 된 이진 파일은 표시하지 않습니다. CRT를 사용하고 있습니까? 기호를 디버그 하시겠습니까? –
@MargaretBloom : 질문을 편집했습니다. – d33tah
가능한 ELF 실행 파일에 필요한 섹션은 무엇입니까? (http://stackoverflow.com/questions/3832801/what-sections-are-required-for-a-usable-elf-executable) –