問題タブ [stack-pointer]
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.
arm - スタック ポインターとプログラム カウンターの違いは何ですか?
私たちがいつも知っているように、マイクロプロセッサによってタスクを実行する手順は、メモリからバイナリ命令を1つずつ実行するだけであり、次の命令のアドレスを保持するプログラムカウンターがあります。したがって、私が間違っていなければ、これがプロセッサがタスクを実行する方法です。しかし、プログラムカウンターとほぼ同じことを行うスタックポインターという名前の別のポインターもあります。私の質問は、なぜメモリ (スタック) のアドレスを指すためにスタック ポインターが必要なのですか? スタック ポインターとプログラム カウンターの主な違いについて誰か教えてもらえますか?
c - カーネル モードでユーザー スタック ポインターを変更します。
関数ポインターとバッファーポインターを ioctl で入力として受け取る char デバイスを作成しています。
ユーザー マシン コンテキストを変更して、ユーザー モードに戻ると、その関数がそのバッファー ポインターが指す新しいスタックで実行されるようにしたいと考えています。
私がやったことは次のとおりです。
良いニュースは、機能がアクティブになっていることです。悪いニュースは、スタックが同じであることです (gdb を使用してテストしました)。
特に、次の場合でもregs->sp = 0;
、新しい関数はクラッシュする必要があるときに実行されます。これは、スタックがないためです。
このようなスタックポインタの割り当ては効果がないようです。
なんで?スタック ポインタを正しく割り当てるにはどうすればよいですか?
Linux カーネルのバージョンは 3.18.106 で、Virtual Box で実行されます。
windows - ESPの下に書くことは有効ですか?
32 ビット Windows アプリケーションの場合、ESP を明示的にデクリメントせずに一時的なスワップ領域に ESP の下のスタック メモリを使用することは有効ですか?
で浮動小数点値を返す関数を考えてみましょうST(0)
。値が現在 EAX の場合、たとえば次のようになります。
または、ESP レジスタを変更せずに、次のようにすることもできます。
どちらの場合も同じことが起こりますが、最初のケースでは、メモリを使用する前にスタック ポインターをデクリメントし、その後でインクリメントするように注意します。後者の場合、私たちはしません。
この値をスタックに永続化する必要があるにもかかわらず (再入の問題、PUSH
ing と値の読み取りの間の関数呼び出しなど)、このような ESP の下のスタックへの書き込みが無効になる根本的な理由はありますか?