`nm` 각 기호 유형에 대해 인쇄할 문자를 선택하는 방법은 무엇입니까?

`nm` 각 기호 유형에 대해 인쇄할 문자를 선택하는 방법은 무엇입니까?

나는 현재 nm주소와 유형과 함께 ELF 파일의 기호를 인쇄하는 유사한 프로그램을 작업 중입니다.

일반적인 출력은 다음과 같습니다.

$ nm ./my_exec      
0000000000003d28 d _DYNAMIC
0000000000003f28 d _GLOBAL_OFFSET_TABLE_
0000000000002000 R _IO_stdin_used
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable

첫 번째 열은 기호 주소, 두 번째 열은 기호 유형, 세 번째 열은 기호 이름입니다.

man은 각 문자의 의미를 나타내며, 대문자는 전역 기호, 소문자는 지역 기호 등입니다.

하지만 난 이해가 안 돼요어떻게사용할 문자를 선택합니다.

라이브러리를 사용하고 Gelf있는데 문자를 확인할 수 있는 필드가 표시되지 않습니다.

답변1

nm캐릭터는 주로 기호가 나타나는 부분을 기준으로 선택됩니다. ELF는 다음에 지정됩니다.시스템 V ABI;기호 테이블은 4-22 페이지에 설명되어 있으며 두 개의 필드로 구성 됩니다 st_info.st_shndx표시된 문자nm.

심볼 바인딩( ELF32_ST_BIND(st_info))은 해당 심볼이 로컬 심볼( 의 소문자 nm)인지, 글로벌 심볼(대문자)인지, 약한 심볼( v, w)인지를 결정합니다. sh_shndx기호가 포함된 부분을 가리키며 많은 nms 문자는 이를 명시적인 부분( b, d...) 또는 특별한 의미가 있는 값( )으로 반영합니다.예를 들어 u, 정의되지 않은 기호 의 경우 SHN_UNDEF).

따라서 표시된 문자에 직접적으로 해당하는 단일 값을 찾을 수는 없지만 nm위의 내용은 ABI 사양에 설명된 대로 값을 해석하는 데 충분한 정보를 제공해야 합니다.

관련 정보