我有一個例程,執行調用的例程,其中ebp
寄存器的值預計。我在例程中多次改變它。所以,我不能這樣做:mov ebp,esp
在頂部code.I嘗試通過將esp
地址保存在另一個寄存器中,並在leave
指令將這樣的地址放入ebp
之前,但我仍然收到segmentaion故障。離開指令返回一個段錯誤
如何解決這個問題?
的代碼是非常巨大的(在這裏發佈,但如果需要,我可以張貼),但這個想法是這樣的:
;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
我希望這個代碼是足以讓你的想法.. 我也喜歡解釋。
看來你已經注意到了這個問題:「我在例行程序中多次改變[EBP的價值]」。不要這樣做。 – SecurityMatt 2013-03-21 01:01:45
@SecurityMatt:但我在'end'標籤中恢復它。是不足夠的?在'ebp'的'esp'地址離開指令? – 2013-03-21 01:04:56
此外,它是我打電話的常規使用的寄存器,我將如何設置它而不修改'ebp'值? – 2013-03-21 01:06:15