1
リンク先:How to get a call stack backtrace?(GCC,MIPS,no frame pointer) アセンブリコードとユーザースタックを使用して関数を反復することにより、コールスタック(詳細は上記のリンクを参照)を再現しています。 私は各関数の前の$属を見つける必要があり、ほとんどの機能は、次の命令で始まる:私は簡単にオペコードから、以前の$ SPを結論付けることができ
addiu sp, sp, -80
。 問題は、スタックを使用していても$ spを変更しない関数が見つかったことです。この種の関数を呼び出す関数はスタック上の同じ起動フレームを使用しているようです。 この場合、前の$ spをどのように再現できますか?
これらはネストされた関数であるとしか想像できません。とにかく、spが変更されていなければ、当然以前のspは現在のものと等しくなります。何を探したいのですか? – Jester
各反復私は以前のspとraを見つけなければなりません。 raはユーザスタックに保存されているので、ユーザスタックにraをプッシュする命令からspからのraのオフセットを結論づけることができます。それが私が各反復を必要とする理由です。 – David
$ spが変更されておらず、$ raが相対的に保存されている場合はどこに$ raが書き込まれているのかを調べるだけで問題はありますか?それが保存されていない場合(リーフ関数)、それはまだ$ raにあります。 – Jester