目标文件中关于文本部分的每个机器代码都有地址,它将从0到数字.
当链接器链接所有目标文件时,有关指令的地址将发生变化.
我无法看到链接器是否会逐个读取有关文本部分的指令以更改每个指令地址.
Disassembly of section .text:
00000000 <_start>:
0: bf 00 00 00 00 mov $0x0,%edi
5: 8b 04 bd 00 00 00 00 mov 0x0(,%edi,4),%eax
c: 89 c3 mov %eax,%ebx
Run Code Online (Sandbox Code Playgroud)
通过链接
08048074 <_start>:
8048074: bf 00 00 00 00 mov $0x0,%edi
8048079: 8b 04 bd a0 90 04 08 mov 0x80490a0(,%edi,4),%eax
8048080: 89 c3 mov %eax,%ebx
Run Code Online (Sandbox Code Playgroud)
就像0→8048074等等.
任何人都可以告诉我以下方法。我听不懂insl指令
static inline void
insl(uint32_t port, void *addr, int cnt) {
asm volatile (
"cld;"
"repne; insl;"
: "=D" (addr), "=c" (cnt)
: "d" (port), "0" (addr), "1" (cnt)
: "memory", "cc");
}
Run Code Online (Sandbox Code Playgroud)