0

我写了 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.cobjdump -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吗?

还有0x4in10: R_X86_64_PC32 array-0x4代表什么?

还有一个问题:我的电脑是 64 位的,但为什么汇编代码中的地址是 32 位的?

4

0 回答 0