$$
은 NASM의 현재 세그먼트 주소로 정의됩니다. 그러나 그것의 진정한 의미는 무엇입니까? 나는 그것을 테스트하는 두 asm
파일 작성 :
a.asm
extern another
[section .text]
global _start
_start:
mov ebx, $$
call another
b.asm
[section .text]
global another
another:
mov eax, $$
ret
컴파일을
nasm -f elf a.asm -g
nasm -f elf b.asm -g
ld -o test a.o b.o
은 최종 파일 test
을 디버깅 GDB를 사용하여, 나는 같은 이름을 가진 두 개의 섹션을 정의 불구하고, $$
두 파일에서 다른 것으로 나타났습니다. 내가 파일에 섹션을 정의하면
- 이
$$
의 값이 해당 섹션의 시작 주소 : 그래서 추측.$$
은 세그먼트 레지스터 (cs, ss, fs, gs, .etc)라고하는 과 아무런 관련이 없습니다. 다른 파일에서 같은 이름의 다른 섹션을 정의한 경우 다른 섹션으로 해석됩니다. 그러나 같은 이름의 두 섹션이 같은 파일에 정의되어있는 경우 두 섹션 사이에 다른 섹션 정의가 있는지 여부에 관계없이 항상 동일한 섹션으로 해석되며 동일한
$$
값으로 해석됩니다. 다음과 같이 두 개의.text
섹션은 동일합니다.[section .text] global _start _start: mov ebx, $$ [section .d] d: mov ecx, $$ [section .text] another: mov eax, $$ ret
나는 컴파일 할 때 NASM 인식하고 적절한 장소에 넣어 수있는 몇 가지 섹션 이름이있는 것 같아요.
.data
과 같이 NASM이 인식 할 수있는 섹션 이름은 무엇입니까? 고마워요!