我写了 2 个 C 程序:main.c 和 sum.c。
这是 main.c :
int array[2] = {1, 2};
int main() {
int val = sum(array, 2);
return val;
}
这是 sum.c :
int sum(int* a, int n) {
int i, s = 0;
for (i = 0; i < n; i++) {
s += a[i];
}
return s;
}
我使用命令gcc -c -o main.o main.c
,objdump -d -r main.o>main.d
我得到:
main.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <main>:
0: f3 0f 1e fa endbr64
4: 48 83 ec 08 sub $0x8,%rsp
8: be 02 00 00 00 mov $0x2,%esi
d: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # 14 <main+0x14>
10: R_X86_64_PC32 array-0x4
14: b8 00 00 00 00 mov $0x0,%eax
19: e8 00 00 00 00 callq 1e <main+0x1e>
1a: R_X86_64_PLT32 sum-0x4
1e: 48 83 c4 08 add $0x8,%rsp
22: c3 retq
是什么1e: R_X86_64_PLT32 sum-0x4
意思?不应该是sum-0x22
因为当时的RIP是0x22吗?
还有0x4
in10: R_X86_64_PC32 array-0x4
代表什么?
还有一个问题:我的电脑是 64 位的,但为什么汇编代码中的地址是 32 位的?