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.