.shstrtab 섹션에는 null로 끝나는 문자열을 포함하는 플래그가 없습니다.

.shstrtab 섹션에는 null로 끝나는 문자열을 포함하는 플래그가 없습니다.

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이러한 현상은 언제든지 발생하지 않습니다. 누군가가 이 조항을 이용했을 수도 있지만 그런 예는 찾을 수 없습니다.

관련 정보