2011-08-08 2 views
2

여러 소스 파일에서 컴파일 된 elf 파일 (실행 파일)을 성공적으로 파싱했습니다. 문자열 (문자열 테이블에서) 기호 이름과 함께 기호 (기호, 기호의 크기 및 주소 (로컬, 전역, 약함), 유형 (개체, 파일, 섹션, 함수)을 가져올 수 있습니다.ELF 파일의 기호 테이블에있는 기호 정보에서 개체 이름을 가져올 수 있습니까?

기호가 연결된 섹션도 나에게 알려져 있습니다.

제 질문은 심볼 테이블 정보의 심볼을 포함하는 정확한 오브젝트 파일 이름 (* * .obj)을 얻을 수 있습니까? 파싱하는 동안 정보가 누락 되었습니까?

답변

1

개체 파일 이름을 직접 가져올 수 없습니다. 링크하는 동안 손실됩니다. 그러나 실행 파일을 만드는 데 사용 된 빌드 프로세스에 따라 STT_FILE 기호에서 개체 파일 이름을 유추 할 수 있습니다 (예 : 실행 파일에 foo.c라는 이름의 STT_FILE 기호가 있음 -> 개체 파일이 foo라고 추측 할 수 있음). 영형).

특정 소스 파일의 기호는 STB_LOCAL의 바인딩으로 STT_FILE 기호 다음에 나타납니다. 시스템 V ABI 표준에서

:

STT_FILE은 - 종래는, 심볼의 이름은 목적 파일과 연관된 소스 파일의 이름을 제공합니다. 파일 심볼은 STB_LOCAL 바인딩을 가지며, 섹션 인덱스는 SHN_ABS이며, 파일에 대한 다른 STB_LOCAL 심볼보다 앞에 위치합니다 (존재하는 경우).