ここで何が起こっているのか、スタックの内容、ESP、EBP、SSレジスタのどこにここに書かれているコードのところで。 ここだから私はスタック上に何があるか確認する必要が私のコードアセンブリ - スタック、プロシージャ、ESP、EBP、SS - 理解してください
include \masm32\include\masm32rt.inc
.data?
value DWORD ?
.code
start:
push 42
push 5
call xyz
mov value, EAX
print str$(value)
exit
xyz:
enter 4, 0
; HERE
leave
ret 8
end start
です。
42
5
return address
previous ebp pushed by "enter"; new ebp points here
4 uninitialized bytes due to "enter"; esp points here
あなたはもちろんでこれを見ることができます:
ここで私の最高の推測では、すべてが、スタックは次のようになります(テキストスタック下にある)
あなたは 'enter'が何をするかについてのマニュアルを読む必要があります。
enter x, 0
はと等価であることは注意してください。ヒント:2つのオペランドをスタックにプッシュしません。また、 'ESP'は常に、stack_の_topとして知られているものを指しています。これは、実際には下図のようになります。 – Jester
@Jester私は、このスタックでは底から上に向かって成長していると言っていたはずです。私はEnterを読んでスタックフレームを作成し、そのスタックフレームを破壊したままにします。私はそれをかなり理解していないだけです。これ以上の助けがあれば素晴らしいだろう。ご意見ありがとうございます。 – tay1392
スタックがボトムアップから成長する場合は、さらに悪化します。スタックに置かれる最初のものは42です、そのロジックによって、底にあるはずです。 PS:デバッガでコードをシングルステップ実行して、各命令で何が起こるかを確認できます;) – Jester