レジスタへの値が期待されるルーチンへの呼び出しを実行するルーチンがあります。ルーチンで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
このコードで十分だと思います..説明も好きです.