OS X (x86-64)에서 C 심볼을로드해야하는 어셈블리가 있습니다. 86, 당신은이 작업을 수행하는 방법은 다음과 같습니다심볼 주소로드 (nasm, 64 비트 OS X)
LD : 경고 : PIE 사용할
mov rax, some_symbol_name
그러나, - 64로,이 링크 경고가 발생합니다. 절대 주소 지정 (아마도 -mdynamic-no-pic)은 코드 서명 된 PIE에서는 허용되지 않지만 Test2.o에서는 _main에서 사용됩니다. 내가 PIE가 무엇인지, 그리고 나는 그것을 사용하지 않으려는하지 않습니다
는 -no_pie, -Wl와 -mdynamic 노 그림 또는 링크
주를 컴파일하지 않는,이 경고를 해결하려면. 난 정말이 (겉으로는) 간단한 문제에 난처한 해요
movq rax, some_symbol_name ; Link warning
lea rax, [rel some_symbol_name] ; No link warning, but doesn't always get correct address
: 여기 레지스터에 심볼의 주소를로드하는 내 다른 시도의 일부입니다. 나는 GAS 해체를 살펴 봤고 위의 lea
행을 따라 뭔가를하고있는 것처럼 보이지만 NASM이 올바른 코드를 생성 할 수는 없습니다.
편집 :
leaq some_symbol_name(%rip), %rax
나는이 두 가지 옵션을 시도해 보았고 때로는 잘못된 주소가 계산되는 결과를 낳았습니다. 이것은 올바른 해결책 일 것입니다,하지만 저는 x86-64 용 NASM의 OS X 버전에 버그가 있다고 생각합니다. –