2010-05-28 6 views
2

는 가정 다음액세스 ELF 문자열 테이블 섹션 헤더

Elf_Section_Header *sectionHeaderTable //points to the start of a ELF section header table 
Elf_Section_Header *symtabHeader //points to the start of the symtab section header 

왜 연관된 문자열 테이블 섹션 헤더에 나를 가리킨 다음하지 않는 이유는 무엇입니까?

Elf_Section_Header *strTabSectionHeader = (Elf_Section_Header *)((char *)sectionHeaderTable + (symtabHeader->strtab_index)); 

strTabSectionHeader->type == SHT_STRTAB 거짓

동일 어떻게 관련 문자열 테이블 섹션 헤더를 가리켜 야?

답변

2

아마도 struct struct member는 심볼 테이블 헤더의 멤버를 참조합니다 (ELF 사양에서 이름이 지정됨).

실제로는 내에서 섹션 헤더 문자열 테이블 섹션이 아닌 문자열 테이블의 위치입니다.

문자열 테이블은 자체 섹션에 저장됩니다. 섹션 헤더 문자열 테이블은 특히 ELF 헤더의 e_shstrndx 구성원에 있습니다. 이것은 섹션 헤더 테이블에 대한 인덱스입니다. 따라서 sectionHeaderTable[elf_header->e_shstrndx]이 원하는 것 같습니다 (섹션 헤더 문자열 테이블의 섹션 헤더). 위의 문제

1. .dynstr 
2. .shstrtab 
3. .strtab 

스탠드를 확장 할 때 우리가 .shstrtab있는 우려 - - 섹션 헤더 문자열 테이블

0

각 이진은 일반적으로 세 개의 문자열 테이블이 포함되어 있습니다. ELF 헤더를 읽을 때 우리는 ELF 헤더에서 다음 필드를 찾습니다 - e_shstrndx. 이것은 .shstrtab을 찾을 수있는 색인입니다. 각 매개 변수의

offset = ((elfHdr.e_shstrndx)*elfHdr.e_shentsize)+elfHdr.e_shoff 

의미 - - 유 자세한 내용

0

이 섹션 헤더의 sh_name가를 보유하고 필요한 경우

elfHdr.e_shstrndx = index where we can find .shstrtab 
elfHdr.e_shentsize = Size of each Section Header 
elfHdr.e_shoff = Offset at which section header starts. 

댓글하시기 바랍니다 다음 공식이 수행되는 방법을 계산하는 데 사용할 수 있습니다 ELF 헤더의 e_shstrndx 구성원에 의해 지정된대로 섹션 헤더 문자열 테이블 섹션에 색인을 만듭니다. ELF Specification

관련 문제