У меня есть какая-то сборка, которая должна загрузить символ C в OS X (x86-64).С x86 вы можете сделать следующее:
mov rax, some_symbol_name
Однако с x86-64 это вызывает предупреждение о ссылке:
ld: warning: PIE отключен.Абсолютная адресация (возможно, -mdynamic-no-pic) не разрешена в коде, подписанном PIE, но используется в _main из Test2.o.
Чтобы исправить это предупреждение, не компилируйте с -mdynamic-no-pic или не связывайте с -Wl, -no_pie
Примечание: я знаю, что такое пирог, и не хочу его отключать.Вот некоторые другие мои попытки загрузить адрес символа в регистр:
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 генерировать правильный код.
EDIT: Для справки,это код сборки, сгенерированный GAS:
leaq some_symbol_name(%rip), %rax