2010-06-08 2 views
0

gcc를 사용하여 간단한 프로그램을 컴파일하고 objdump를 사용하여 섹션 헤더를 보면 .symtab 섹션이 표시되지 않습니다. 동일한 a.out 파일의 경우 readelf 섹션을 보여줍니다.readelf가 수행하는 동안 objdump가 .symtab 섹션을 표시하지 않는 이유는 무엇입니까?

[25] .symtab   SYMTAB   00000000 000ca4 000480 10  26 2c 4 
[26] .strtab   STRTAB   00000000 001124 00025c 00  0 0 1 

왜?

기본 링커 스크립트에서 .symtab 섹션의 정의를 찾지 못했습니다. I 링커 스크립트와 같은 자신에 의해 정의를 추가하는 경우 __start_sym의 어드레스 w/B

.... 
PROVIDE(__start_sym) 
.symtab : { *(.symtab)} 
PROVIDE(__end_sym) 
.... 

차이와 __end_sym은 이러한 부분이 출력 파일에 추가되지 않는 것을 의미한다 제로이다.

그러나 독자는 섹션을 읽고이 섹션의 내용을 덤프 할 수 있습니다. 어떻게? 왜 ?

+0

'objdump -x'를해도? – James

+0

'objdump -t file'과'readelf -s file'은 같은 정보를 다른 방식으로 제공해야합니다 – ShinTakezou

답변

1

물론 symtab 섹션이 있습니다. 이 도구는 정보를 다른 방식으로 제공합니다. symtab은 objdump를의 동적 섹션으로 표시됩니다

 
... 
    STRTAB    0x08048408 
    SYMTAB    0x08048178 
    STRSZ    0x0000016d 
... 

은 objdump는 readelf 동안 (예를 들어 너무 분해 할 수 있도록) "개체"로 파일에 초점을 더 보이는이 양식 (-x 시도) (또는 모두) 이상 ELF 형식이 제공 할 수있는 정보, 즉 파일 "구조"자체에 대해.

관련 문제