`.bss` 섹션의 내용을 직접 가져올 수없는 이유는 무엇입니까?

테스트는 Linux 32 비트에서 이루어집니다.

이 명령을 사용하여 .text .rodata.data 섹션 :

objdump -s -j .text elf_binary objdump -s -j .rodata elf_binary objdump -s -j .data elf_binary 

하지만 기본적으로 이것을 사용하여 .bss 섹션의 내용을 가져 오려고 할 때 항상 아래와 같은 오류가 발생합니다.

objdump -s -j .bss elf_binary objdump: section ".bss" mentioned in a -j option, but not found in any input file 

기본적으로 ELF 바이너리에서 .bss 섹션의 내용을 가져 오려면 어떻게해야합니까?

Answer

.bss에는 콘텐츠가 없습니다. 프로그램을 시작할 때 일부 공간을 미리 할당하는 것은 로더에 대한 팁일뿐입니다. 실행시 모두 0이되며 프로그램이 쓸 때까지 유용한 정보를 보유하지 않습니다. 그런 다음 디버거를 사용하여 메모리를 덤프하고 콘텐츠를 탐색 할 수 있습니다.

자세한 내용은 Wikipedia 페이지 를 확인하세요.

p>

답변

.bss 기호로 시작되는 블록 ( 초기화되지 않은 데이터 세그먼트라고도합니다. bss는 고대 IBM 칩에 대한 이전 어셈블리 명령어입니다.) 섹션에는 global variables

초기화되지 않았거나 0 또는 NULL로 초기화되었습니다. .bss 섹션은 일반적으로 프로그램 실행이 시작될 때까지 존재하지 않습니다. 이것이 바로 “정적으로 콘텐츠를 검색 할 수없는 이유입니다.이 섹션이 프로그램을 줄이는 데 도움이된다는 점에 유의하는 것이 매우 중요합니다.” s 크기 &는로드를 더 빠르게합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다