这个电话去哪儿了

Where does this call go?

本文关键字:电话      更新时间:2023-10-16

也许这对cpp开发人员来说太简单了,我无法理解。。

在这个简单的对象文件中,在第"3f"行和第"2d"行寻址是如何工作的?14和0索引来自哪里?

2d:   e8 e2 ff ff ff          callq  14 <_ZL9privatef2v>
3f:   e8 bc ff ff ff          callq  0 <_ZL8privatefii>

完全拆卸:

Disassembly of section .text:
0000000000000000 <_ZL8privatefii>:
   0:   55                      push   %rbp
   1:   48 89 e5                mov    %rsp,%rbp
   4:   89 7d fc                mov    %edi,-0x4(%rbp)
   7:   89 75 f8                mov    %esi,-0x8(%rbp)
   a:   8b 45 f8                mov    -0x8(%rbp),%eax
   d:   8b 55 fc                mov    -0x4(%rbp),%edx
  10:   01 d0                   add    %edx,%eax
  12:   5d                      pop    %rbp
  13:   c3                      retq
0000000000000014 <_ZL9privatef2v>:
  14:   55                      push   %rbp
  15:   48 89 e5                mov    %rsp,%rbp
  18:   b8 86 00 00 00          mov    $0x86,%eax
  1d:   5d                      pop    %rbp
  1e:   c3                      retq
000000000000001f <_Z3fooii>:
  1f:   55                      push   %rbp
  20:   48 89 e5                mov    %rsp,%rbp
  23:   48 83 ec 18             sub    $0x18,%rsp
  27:   89 7d ec                mov    %edi,-0x14(%rbp)
  2a:   89 75 e8                mov    %esi,-0x18(%rbp)
  2d:   e8 e2 ff ff ff          callq  14 <_ZL9privatef2v>
  32:   89 45 fc                mov    %eax,-0x4(%rbp)
  35:   8b 55 e8                mov    -0x18(%rbp),%edx
  38:   8b 45 fc                mov    -0x4(%rbp),%eax
  3b:   89 d6                   mov    %edx,%esi
  3d:   89 c7                   mov    %eax,%edi
  3f:   e8 bc ff ff ff          callq  0 <_ZL8privatefii>
  44:   c9                      leaveq
  45:   c3                      retq
0000000000000046 <main>:
  46:   55                      push   %rbp
  47:   48 89 e5                mov    %rsp,%rbp
  4a:   48 83 ec 10             sub    $0x10,%rsp
  4e:   be 0a 00 00 00          mov    $0xa,%esi
  53:   bf 0a 00 00 00          mov    $0xa,%edi
  58:   e8 00 00 00 00          callq  5d <main+0x17>
  5d:   89 45 fc                mov    %eax,-0x4(%rbp)
  60:   b8 00 00 00 00          mov    $0x0,%eax
  65:   c9                      leaveq
  66:   c3                      retq

搬迁表:

RELOCATION RECORDS FOR [.text]:
OFFSET           TYPE              VALUE
0000000000000059 R_X86_64_PC32     _Z3fooii-0x0000000000000004

RELOCATION RECORDS FOR [.eh_frame]:
OFFSET           TYPE              VALUE
0000000000000020 R_X86_64_PC32     .text
0000000000000040 R_X86_64_PC32     .text+0x0000000000000014
0000000000000060 R_X86_64_PC32     .text+0x000000000000001f
0000000000000080 R_X86_64_PC32     .text+0x0000000000000046

callq N, text指令中,N似乎是要调用的地址,而文本似乎是分配给该地址的标签。因此,0与&lt_ZL8privatefii>和14与&lt_ZL9private2v>。