問題タブ [pintos]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
162 参照

pointers - 割り込みハンドラ内のユーザー スタックから値をポップする

Pintos でシステム コールのハンドラを実装しようとしています。割り込みが発生する前に、システム コールの引数が次の方法でプッシュされます。

プッシュされたすべてのレジスタを含む構造体だけでなく、(システム コール番号と引数がプッシュされた) ユーザー レベル スタックへのポインターも利用できます。

これらの引数を取得したいと思います。スタック上のすべてのポインターのサイズは 4 バイトであるため、単純に引数 (参照解除されたポインター) を対応する型にキャストし、スタック ポインターを 4 増やして、次のポインターをキャストすることができると考えました。

次の質問があります。

pushl 命令は値をスタックに正しくプッシュしますか? では、スタックへのポインタを逆参照するだけで、これらの値を取得できるはずですか? たとえば、最初の引数を取得するには (これが int であると仮定)、(int) *(f->esp + 4) を使用します。ここで、f は構造体 intr_frame へのポインターであり、システム コール番号が最初であるため 4 を追加します。スタック上の要素。問題は、C では void ポインターでのポインター演算が許可されておらず、引数が異なる型である可能性があることです。スタックからこれらの引数をポップする方法について誰か提案できますか?