OS X(x86-64)でCシンボルをロードする必要があるアセンブリがあります。 x86のでは、あなたがこれを行う方法は次のとおりです。シンボルのアドレスをロードする(nasm、64ビットOS X)
LD:警告:PIEが無効になって
mov rax, some_symbol_name
しかし、x86-64ので、これはリンクの警告の原因となります。絶対アドレス指定(おそらく-mdynamic-no-pic)は、コードで署名されたPIEでは使用できませんが、Test2.oから_mainで使用されます。この警告を修正するには
、
注-no_pie、-mdynamic-NO-PICまたは-Wlとのリンクを使用してコンパイルしていない:私は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:参考までに、これはガスによって生成されたアセンブリコードです:
leaq some_symbol_name(%rip), %rax
私はこれらのオプションを試してみたところ、間違ったアドレスが計算されることがありました。これは正しい解決策ではありますが、OS X版のNASM for x86-64にはバグがあると思います。 –