실행 파일에 사용된 정적 라이브러리 목록 가져오기
부터ldd
에 다이내믹 라이브러리만 나타냅니다.실행 파일 작성에 사용되는 스태틱라이브러리에 대한 정보를 추출하는 방법이 있나요?
ldd <exe filename>
에 동적으로 링크된 라이브러리를 나타냅니다.
nm <exe filename>
에 파일 내의 기호를 나타냅니다.
정적 라이브러리에서 가져온 기호를 확인하려면 를 실행해야 합니다.nm
이러한 라이브러리와 비교하여 라이브러리에 있는 기호(예: 기호 등)의 목록을 가져온 다음, 해당 라이브러리와 기호 목록을 비교합니다.nm <exe filename>
.
목록과comm
명령어를 입력합니다.봐man comm
자세한 것은, 을 참조해 주세요.
이것은 여기 이 포럼에서 가져온 것입니다.
일부 ELF 실행 파일 내에 정적 라이브러리 목록을 가져올 방법은 없습니다.
왜냐하면 링커에서는 스태틱라이브러리가 '게으른' 멤버 세트로 사용되기 때문입니다.따라서 결과 ELF 실행 파일에는 링크에 필요한 멤버만 포함됩니다.그래서 멤버들은foo2.o
의libfoo.a
오브젝트 파일처럼 링크되어 있습니다.foo2.o
실행파일에 링크되어 있습니다(에서 정의된 기호가 있는 경우).foo2
필요한 경우, 즉 어딘가에서 참조할 수 있습니다.)
네, 물론nm
, 또는objdump
, 또는readelf
, 또는strings
일부 ELF 실행 파일에서는 정적 라이브러리(또는 그 안에서 사용되는 리터럴 문자열)에 정의된 기호를 볼 수 있기 때문에 어떤 객체 파일(스태틱 라이브러리에서 가져온 파일 포함)이 그 안에 있는지 힌트를 줄 수 있습니다.
소스 코드를 가지고 있고 이 모든 코드를 검토하고 싶지 않은 경우 컴파일 중에 맵파일을 생성하여 어떤 스태틱라이브러리가 링크되어 있는지 확인할 수 있습니다.
예를들면g++ -Xlinker -Map=a.map main.c
맵 파일에서 링크된 스태틱라이브러리 정보를 확인합니다.
아니요, 라이브러리 이름은 링크 프로세스 중에 삭제됩니다.그러나 실행 파일에 디버깅 정보가 포함되어 있는 경우(즉, -g 플래그를 사용하여 컴파일된 경우) 이 정보를 얻을 수 있습니다.
주어진 컴파일러가 바이너리 안에 메타 데이터를 저장하지 않는 한, 아니다.정적 라이브러리는 바이너리로 직접 컴파일되는 코드입니다.
언급URL : https://stackoverflow.com/questions/1124571/get-list-of-static-libraries-used-in-an-executable
'programing' 카테고리의 다른 글
함수 포인터의 포인트는 무엇입니까? (0) | 2022.08.14 |
---|---|
왜 '?'와 '\?'는 C에서 같은 출력을 출력합니까? (0) | 2022.08.14 |
외부 스크립트가 Vue.js에 로드될 때까지 실행을 연기합니다. (0) | 2022.08.14 |
컨스트럭터에서 덮어쓸 수 있는 메서드 호출에 문제가 있습니까? (0) | 2022.08.14 |
섹션과 태스크 openmp의 차이 (0) | 2022.08.14 |