我已经拆解了一个简单的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]
答案 0 :(得分:2)
调用指令只接受一个操作数,它是一个非描述性地址。反汇编程序试图变得更好并找到呼叫目标的符号。地址是1e,那里没有符号,所以反汇编程序找到最接近的符号(_Dmain)并给出它的偏移量。这不是第二个论点,它暗示着你。