为了使call
绝对地址正常(接近直接相对),在您编写的 NASM 或 AT&T 语法中call 0x1234567
,汇编器 + 链接器负责计算 arel32
以从链接器放置call
指令的任何位置到达该目标。
例如,在 Linux 上用 将其组装成静态 64 位 ELF 可执行文件yasm -felf64 foo.asm && ld foo.o -o foo
,然后用 反汇编objdump -drwC -Mintel foo
为您提供:
foo: file format elf64-x86-64
Disassembly of section .text:
0000000000400080 <_start>:
400080: e8 e2 44 e3 00 call 1234567 <_end+0xc344df>
Run Code Online (Sandbox Code Playgroud)
链接器根据目标文件中的重定位计算了0x1234567
从到达的正确 rel32 :0x400080+5
R_X86_64_PC32
0: e8 00 00 00 00 call 5 <_start+0x5> 1: R_X86_64_PC32 *ABS*+0x1234563
Run Code Online (Sandbox Code Playgroud)
你如何让 MASM …