我在程序集IA-32中进行编码,当我在subl
上使用%esp
并且push
注册%ebx
时,我遇到了一些问题,{{1 },%esi
)。
我知道如果我需要调用函数,我必须使用%edi
上的subl
,%esp
的大小是函数有4次的参数个数(大小sub
)。
我们通常需要推送一些寄存器,因为当我们调用函数int
时,%eax
和%ecx
会丢失其内容。
现在我知道在代码的最后我们必须<{>>添加 %edx
我们减去的内容和esp
寄存器。这与开头的顺序相反。
这是我的问题:如果我在程序集(IA-32)中重写带有2个参数的C函数,我需要推送3个寄存器pop
,%ebx
和%esi
和来自%edi
的{{1}},因为我的C函数调用了另一个函数(我使用sub 12
,因为我不知道其他解决方案)堆栈的哪个点是我的C函数的第一个参数是什么? (我的意思是%esp
)。谢谢大家,这对我来说是一个很大的问题,我不明白%esp
和%esp
如何处理sub
。
代码:
push