nasm
을 사용하여 객체를 어셈블 할 때 최종 레이블과 최종 결과 인 .o
파일에 모든 레이블이 기호로 포함되어 있음을 발견했습니다.모든 asm 레이블이 실행 가능 파일의 기호가 됨
이것은 내가 GLOBAL
으로 선언 한 함수 엔트리 포인트와 섹션 시작 부분 (예 : .text
섹션)에 대해 의미가 있지만, 루프 엔트리 포인트로 사용되는 라벨이 거의 보이지 않는 것처럼 보입니다. 출력 파일에. 내부 구현 세부 사항을 유출하는 것 외에도 심볼 테이블의 공간을 낭비합니다. 이 짧은 조립 프로그램 주어진 예를 들어
:
GLOBAL _start
_start:
xor eax, eax
normal_label:
xor eax, eax
.local_label:
xor eax, eax
xor edi, edi
mov eax, 231 ; exit(0)
syscall
는 ... 사용하여 구축 :에
nasm -f elf64 label-test.s
ld label-test.o -o label-test
결과를 l
(즉, 로컬) 오브젝트 파일과 링크 된 실행 파일을 모두 심볼 :
objdump --syms label-test.o
label-test.o: file format elf64-x86-64
SYMBOL TABLE:
0000000000000000 l df *ABS* 0000000000000000 label-test.s
0000000000000000 l d .text 0000000000000000 .text
0000000000000002 l .text 0000000000000000 normal_label
0000000000000004 l .text 0000000000000000 normal_label.local_label
0000000000000000 g .text 0000000000000000 _start
normal_label
및 th e 로컬 라벨 local_label
은 기호 테이블에서 끝났습니다. 그들 모두는 실행 파일의 심볼 테이블에서도 끝납니다.
이 기호를 최종 실행 파일로 내보내고 싶지 않습니다. nasm에게 그들을 포함시키지 말라고 할 수 있습니까? ld
으로 전달할 수있는 옵션이 있습니다 (예 : --strip-all
). 이러한 기호는 제거되지만 실행 파일의 기호는 모두 개입니다. 즉에게 꽤 곤장을한다 : 그것은 등 정말 읽을 스택 추적, 디버깅을 위해 유지하려는 기호, 피터 코르에서 언급 한 바와 같이
FWIW, yasm
정확히 같은 문제가되지 않습니다를 제거합니다. 위와 동일한 방식으로 구축 된 elf64 .o
파일 (그러나 nasm
대체 yasm
, 우리가 얻을 :
objdump --syms label-test-yasm.o
label-test-yasm.o: file format elf64-x86-64
SYMBOL TABLE:
0000000000000000 l df *ABS* 0000000000000000 label-test.s
0000000000000004 l .text 0000000000000000
0000000000000002 l .text 0000000000000000
0000000000000000 l d .text 0000000000000000 .text
0000000000000000 g .text 0000000000000000 _start
가 글로벌 _start
라벨이 여전히 포함되어 있지만 다른 두 레이블 이름이되지 않습니다 - 그들은 그래도 그들은 여전히 4 자리와 2 자리에있는 이름없는 기호입니다 (위 목록의 2 줄과 3 줄). 이것은 더 많은 레이블을 추가하여 확인됩니다 - 더 많은 미가공 기호가 생성됩니다 -
yasm은 기본적으로 그렇게하지 않습니다. ('-gdwarf2'를 사용하면된다.) –
허, 그래. 어쩌면 약간의 불편 함이있을 수 있습니다. 나는 그 질문의 맨 아래에 추가했다. 당신은'-g '라고 언급하고 나에게 이것은 디버깅을 위해 추가 된 것이지만,'ld' 명령에있는'--strip-debug'는 그것들을 제거하지 않는다는 것을 주목할 필요가 있습니다. nasm에 의해 빌드 된 바이너리. – BeeOnRope
글쎄, 이번에는 좀 더 세게 봤어. 그냥 [nasm의 한계] (https://forum.nasm.us/index.php?topic=1951.0)처럼 보일 것 같다. – BeeOnRope