ELF에 있는 모든 기호의 크기와 출처를 추출합니다.

ELF에 있는 모든 기호의 크기와 출처를 추출합니다.

바이너리의 다양한 구성 요소의 코드 크기를 추정하려고 합니다. 소스 코드와 모든 빌드 개체 파일이 포함된 빌드 디렉터리에 액세스할 수 있습니다. 물론 실제로 사용되는 심볼만 포함하고 싶기 때문에 모든 개체 파일 .text.data섹션의 크기를 추가하면 실제 값이 과대평가되게 됩니다.

ELF 파일을 연결하는 데 사용되는 모든 기호의 크기와 출처를 확인하는 방법은 무엇입니까? 다음과 같은 것이 유용할 것입니다:

Symbol   Size   Origin
func1    0x50   ../src/func1.o
func2    0x75   ../src/func2.o
...

이는 모든 기호에 대해 유사합니다 .data. 생성된 .map파일에는 다음이 있는 것 같습니다.일부그러나 이러한 데이터는 불완전한 것으로 보입니다. 눈에 띄는 두 부분은 다음과 같습니다.

Allocating common symbols
Common symbol       size              file

s_Handle         0x8               ../BUILD/src/handle.o
_main_obj        0x48              ../BUILD/src/boot.o
....

그러나 여기에는 수십 개의 기호만 나열되어 있습니다. 다음 섹션에는 더 많은 기호가 있는 것으로 보이지만 링크할 때 "더 이상 사용되지 않음"으로 표시됩니다.

Discarded input sections

 .text          0x00000000        0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/crti.o
 .data          0x00000000        0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/crti.o
 .bss           0x00000000        0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/crti.o
 .data          0x00000000        0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/crt0.o
 .bss           0x00000000        0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/crt0.o
 .ARM.extab     0x00000000        0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/crt0.o
 .text._Z12notify_startv
                0x00000000       0x14 ../BUILD/./test_env.o
 .text._Z30notify_performance_coefficientPKci
                0x00000000       0x18 ../BUILD/./test_env.o
 .text._Z30notify_performance_coefficientPKcj
                0x00000000       0x18 ../BUILD/./test_env.o
 .text._Z30notify_performance_coefficientPKcd
                0x00000000       0x20 ../BUILD/./test_env.o
 .text._Z17notify_completionb
                0x00000000       0x64 ../BUILD/./test_env.o
 .text._Z21notify_completion_strbPc
                0x00000000       0x30 ../BUILD/./test_env.o
...

답변1

당신은 사용하고 싶을 수도 있습니다부풀어 오른 맥브로트 얼굴:

"VM SIZE" 열은 바이너리가 메모리에 로드될 때 차지하는 공간을 알려줍니다. 파일 크기 열은 바이너리가 디스크에서 차지하는 공간을 알려줍니다. [...]기본값무너지다브로디에는섹션별, 그러나 다음과 같이 바이너리 파일을 분할하는 다른 많은 방법을 지원합니다.상징그리고시장 부문. 디버그 정보로 컴파일하면 충돌이 발생할 수도 있습니다.컴파일 유닛과 인라인을 통해!

답변2

언급할 수는 없습니다. 참고만 하세요. 이 Allocating common symbols섹션에는 프로그램의 전역 변수 이름과 크기가 나열되어 있습니다.

관련 정보