我有两行代码。
leal 12(%ebp), %ecx
pushl %ecx
call func
和
movl 12(%ebp), %edx
leal (%edx), %ecx
pushl %ecx
call func
我有一个C函数func(&argument)
。第一行有效,另一行无效。谁能告诉我为什么?
答案 0 :(得分:1)
因为ff d0 callq *%rax
41 ff 14 dc callq *(%r12,%rbx,8)
是移位和加法指令,但是lea
(带有内存源操作数)是一个加载,所以第二个块做mov
。显然,当func(argument)
正确时,这并不起作用。
insn参考手册(x86标签wiki中的链接)记录了哪些说明。