2012-11-19 2 views
3

저는 elf 파일을 검사하는 스크립트를 작성하고 있습니다. 그리고 어떤 시점에서 연결 유형을 점검해야합니다.
그래서,
출력 파일이 완전히 정적 링크인지 동적 링크인지를 확인하는 데 사용할 수있는 도구가 안정적입니까?elf 파일의 연결 유형을 알려주는 방법은 무엇입니까?

'ld.so --verify'는 파일이 동적 연결인지 확인할 수 있지만이 링커에서 핸들 링 할 수 있는지 여부를 확인할 수 있으므로 링크 유형을 결정할 때 결과를 사용할 수 없습니다.

'nm', 'file'과 같은 다른 도구는 출력 파일을 확인하고 인쇄 메시지별로 유형을 연결하는 것에 대한 정보를 제공하므로 사용하기가 쉽지 않습니다. 링크 유형을 검증 할 때 '파일 $ filename'의 표준 출력을 '동적으로 링크'한 '동적으로 링크 된'단어를 grep하는 스크립트를 작성하면 신뢰성이 떨어집니다.

그래서 간단한 방법이 있습니까? 작은 도구 링크 유형을 확인하려면? 왜 불가능합니까? 이 동적으로 정적이 1

답변

1

찾고 - 언급 한 바와 같이 ldd은 그것을 결정하는 데 (ab-) 사용할 수 있습니다. file도 사용할 수 있습니다. 그러나 정보는 ELF 헤더에 있으며 올바르게 구문 분석되어야하므로 간단한 프로그램을 작성하는 것이 어렵지 않아야합니다.

+0

감사합니다. 하지만 ldd에 대한 소스 코드를 확인했는데 ldd가 동적 링크가 아닌 경우에만 1을 리턴한다고 생각하지 않습니다. 다른 이유이기도하므로 그 결과를 사용할 수 없습니다. – user1836141

+0

@ user1836141 사실, 파일이 존재하지 않거나 엘프가 아닌 경우 ldd를 사용하기 전에 확인할 수 있습니다. 다른 명령도 동일한 문제가 있음을 유의하십시오. – iabdalkader

+0

'readelf -d'라는 명령이있어 elf 파일의 동적 섹션을 검사하지만 불행히도 동적 섹션이 없어도 0을 반환합니다. 그렇지 않으면 해결책이 될 수 있습니다. 또 다른 가능한 해결책은 'readelf -h'를 사용하여 elf 헤더 섹션을 나열한 다음 출력을 grep하는 것입니다. 다시 ... 전혀 아름답 지 않지만 다른 것보다 더 신뢰할 수 있습니다 ... 잘 모르겠습니다 ... 좀 더 나은 솔루션을 얻을 수 있기를 바랍니다. – user1836141

0

난 당신이 무엇인지 구체적으로 수행하는 유틸리티 알지 못한다 반환 연결된 경우는, 공유 라이브러리를 출력하고 0 반환 연결 않다면 당신은 바이너리에 ldd을 사용할 수 있습니다

+0

ldd를 사용하려면 어떻게해야합니까? 나는 이것을위한 기존의 도구가 없다면, elf 헤더를 파싱 할 필요가 있다고 생각한다. – user1836141

+0

당신의'ldd' 버전에 달려있을 것 같아요. 정적 링크 된 바이너리에 대해'동적 실행 파일이 아니라 '라는 보고서가 있는데,'1' 종료 코드로 종료합니다. 여기서 동적 바이너리는 의존성을 나열하고 0과 함께 종료 ... – twalberg

+0

그래,하지만 멀티플렉서가 위층에 대답했기 때문에, 나는 ldd가 오류 1을 반환했을뿐만 아니라 dynamica가 링크되지 않았을 때, 다른 오류도있을 수 있다고 생각합니다. so .... – user1836141