これに答える簡単な方法は、命令をオブジェクト ファイルにアセンブルし、Intel 構文で逆アセンブルすることです。のようなコマンドを使用できますobjdump -d -Mintel test.o
。
そのようにすると、次のようになります。
Disassembly of section .text:
0000000000000000 <test>:
0: 48 8d 3d 00 00 00 00 lea rdi,[rip+0x0] # 7 <test+0x7>
そして、それはかなり明確なはずです。mystring
が に変わっていることに注意してください0x0
: これらのゼロは、の再配置を使用してリンク時に調整されるプレースホルダー バイトですmystring
。アセンブリ ソースでは、そこで識別子を使用します。
編集:より明確にするために、ソースファイルの例を次に示します。
.intel_syntax noprefix
.globl test
test:
lea rdi, [rip+mystring]
そして、これが分解です(からobjdump -rd -Mintel test.o
)。PC 相対の再配置に注意してください。
0000000000000000 <test>:
0: 48 8d 3d 00 00 00 00 lea rdi,[rip+0x0] # 7 <test+0x7>
3: R_X86_64_PC32 mystring+0xfffffffffffffffc