X-86またはIA32アセンブリ言語についての質問があります(実際には、同じテキストブックに置き換えて使用しているようですが)。以下のコードがあります。次の操作アセンブリ言語+レジスタ間の移動値
%ebp
の現在の値(スタックアドレス)をレジスタに追加して0x20
を追加し、その結果を現在の値%ebp
に格納します。これは私が基本的には、GDBを使った実際の計算では%ebp + 0x20
です前のスタックフレームのフレームポインタを計算しているコードです。誰でも私が逃していることを教えてもらえますか?私は「スタックアドレス」を言うとき
movl %ebp, %edx //move the "stack address" of %ebp into the register
addl $0x20, %edx // add 0x20 to the value in %edx which is actually the address of the stack of %ebp
movl %edx, (%ebp) //overwrite the contents of %ebp with our calculated values from the previous 2 steps
はまた、私は
%esp
スタックポインタを意味するものではありません。スタックに格納されている値の代わりにその場所のメモリアドレスを意味します(意味がある場合)。
スタックアドレスは '%esp'にありますstachポインタではない'%ebp'ベースポインタ –
正しいと思われます。どのような問題が発生していますか? – BlackBear
基本的に私のプログラムはちょうどsegfaultsです計算は私のコードがそれを行うと思うように実行されていないという事実のために仮定しています – cpowel2