readelf -S a.out
산출:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Ar
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS 08048060 000060 000013 00 AX 0 0 16
[ 2] .rodata PROGBITS 08048074 000074 00000b 00 A 0 0 4
[ 3] .shstrtab STRTAB 00000000 00007f 000019 00 0 0 1
.shstrtab의 유형은 다음과 같습니다.스트라탭. 하지만 플래그를 설정하지는 않습니다. /bin/true와 비슷합니다.
Flag: SHF_STRINGS: Contains null-terminated strings
Type: SHT_STRTAB: String table
글쎄, 그것은 중복되는 것 같습니다. String 플래그는 String 유형과 독립적으로 사용됩니까?
답변1
SHF_STRINGS
해당 속성이 표시되지 않습니다.System V 애플리케이션 바이너리 인터페이스, 버전 4.1(초안, 1997년 3월 18일) 문서(뒤집다가 발견함)위키피디아 항목), 아래에 나열된 것을 찾았습니다.System V ABI 업데이트(2009년 10월);분명히 추가된 내용입니다두 번째 초안(1999년 5월 3일)이지만 개정 이력에는 추가 이유가 나와 있지 않습니다. 이는 SHF_MERGE
문자열 테이블과 문자열이 아닌 테이블이 실수로 병합(?)되지 않도록 속성과 함께 도입된 것 같습니다 . 그러나 내가 아는 한, SHF_STRINGS
문자열 테이블 외부에 대한 참조(및 SHF_MERGE
태그가 지정된 항목에 의해 영향을 받는 방식 SHF_STRINGS
)나 LSB 또는 아키텍처별 문서에는 참조 가 없습니다 .
따라서 이론상으로는 이 속성을 사용하여 null로 끝나는 문자열이 포함된 문자열 테이블 이외의 부분을 표시할 수 있는 것처럼 보이지만 SHF_STRINGS
이러한 현상은 언제든지 발생하지 않습니다. 누군가가 이 조항을 이용했을 수도 있지만 그런 예는 찾을 수 없습니다.