【发布时间】:2014-05-20 18:50:07
【问题描述】:
我已经反汇编了一个简单的 D 脚本(未链接),我可以找到这个奇怪的程序集(英特尔语法)
call 1e <_Dmain+0x1e>
据我了解,call 将当前堆栈基指针压入堆栈并跳转到它作为参数接收的地址。
虽然这条call 指令似乎需要两个参数。那是怎么回事?
全功能:
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]
【问题讨论】:
-
<_Dmain+0x1e>可能只是反汇编程序的一个注释,表示地址1e对应于_Dmain内的偏移量0x1e。 -
这不是两个论点。
<_Dmain+0x1e>只是根据调试的可执行文件解释的调用地址。 -
@DanielKamilKozar 那不就是调用下一个操作(1e)吗?
-
@JeroenBollen:是的,会的。这很奇特。 :)