我有一个例程调用一个例程,在该例程中需要一个值到ebp
寄存器中。我在例程中更改了几次。所以,我不能这样做:mov ebp,esp
在代码的顶部。我尝试将esp
地址保存在另一个寄存器中在leave
指令将这样的地址放入之前,ebp
但我仍然遇到分段错误。
如何解决这个问题?
代码非常庞大(在这里发布,但如果需要我可以发布),但想法是这样的:
;a lot of arguments are passed in stack
foo:
xor ebx,ebx
mov ecx,esp
loop0:
sub edx,1
jz end
;etc
mov eax,[esp+ebx]
mov ebp,eax
call routinex
;etc..
;...
mov ebp,edx
call printx
add ebx,4
jmp loop0
end:
mov ebp,ecx
leave
ret
我希望这段代码足以让你明白。我也喜欢解释。