nm에 /lib/i386-linux-gnu/libc.so.6에 대한 기호가없는 이유는 무엇입니까?


31

printf를 포함 하여 libc.so.6 파일 에 많은 수의 심볼이 표시 될 것으로 예상했습니다 . 나는 nm 도구를 사용하여 그것들을 찾았지만 libc.so.6에 기호가 없다고 말합니다.

답변:


54

아마도 일반 기호가 제거되었을 것이고 남은 것은 당신이 얻을 수있는 동적 기호입니다 nm -D.


11

@PSkocik 님이 답변했습니다. 더 자세한 내용을 추가하고 싶습니다. ELF에는 두 가지 종류의 기호 섹션이 있습니다. .symtab.dynsym자세한 내용은 Linux 표준 기본 코어 사양 (일명 LSB_5.0.0 참조)입니다. .symtab공유 라이브러리 자체의 링크 단계입니다. 연결이 완료되면 .symtab더 이상 섹션이 필요하지 않습니다. 이 .dynsym섹션에는 런타임에 동적 링커에서 검색해야하는 중요한 기호가 포함되어 있습니다. nm기본적으로 .symtab섹션의 기호 만 덤프합니다 .

LSB_5.0.0 10.2.2.1 절.“ELF 섹션 유형”에 적합한 공유 라이브러리는 둘 다를 갖 .symtab거나 갖지 않아야한다고 말합니다 .dynsym. ABI 라이브러리의 일부로 libc는 .symtab사양에 맞게 제거됩니다 .


0

공유 객체인지 또는 일반 ASCII 파일인지 확인하십시오. 공유 객체 인 경우 "ELF 32 비트 LSB 공유 객체"가 표시됩니다.

file /lib/i386-linux-gnu/libc.so.6

libc.so.6당연히 공유 객체입니다.
Gilles 'SO- 악마 그만해'

나는 리눅스 환경에서 결코 가정하지 않습니다. 누군가 루트 디렉토리를 만질 수 있다고 생각합니다. 예, 이름은 분명히 공유 객체입니다. 그리고 확인하는 것이 아프지 않습니다. 예상 출력을 얻지 못할 때.
jncc99
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.