使用2个参数调用'call'指令

时间:2014-05-20 18:50:08

标签: assembly x86 x86-64

我已经拆解了一个简单的D脚本(取消链接),我可以找到这个奇怪的程序集(英特尔语法)

call   1e <_Dmain+0x1e>

根据我的理解call将当前堆栈基指针推送到堆栈并跳转到它作为参数接收的地址。

call指令似乎需要2个参数。那是怎么回事?

全功能:

0000000000000000 <_Dmain>:
   0:   55                      push   rbp
   1:   48 8b ec                mov    rbp,rsp
   4:   48 83 ec 10             sub    rsp,0x10
   8:   c7 45 f8 05 00 00 00    mov    DWORD PTR [rbp-0x8],0x5
   f:   c7 45 f8 06 00 00 00    mov    DWORD PTR [rbp-0x8],0x6
  16:   48 89 ef                mov    rdi,rbp
  19:   e8 00 00 00 00          call   1e <_Dmain+0x1e>
  1e:   31 c0                   xor    eax,eax
  20:   c9                      leave  
  21:   c3                      ret    
  22:   66 0f 1f 44 00 00       nop    WORD PTR [rax+rax*1+0x0]

1 个答案:

答案 0 :(得分:2)

调用指令只接受一个操作数,它是一个非描述性地址。反汇编程序试图变得更好并找到呼叫目标的符号。地址是1e,那里没有符号,所以反汇编程序找到最接近的符号(_Dmain)并给出它的偏移量。这不是第二个论点,它暗示着你。