問題タブ [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.
linux - %rbp が何も指していないのはなぜですか?
%rspがスタック フレームのトップを指し、%rbpがスタック フレームのベースを指すことが知られています。次に、このコードで%rbp が 0x0 である理由を理解できません。
また、 %rbpが何も指していない場合、スタックに「保存」(プッシュ) するのはなぜですか?
java - ArrayList の拡張 - 脆弱な基本クラス
Java のベスト プラクティスを調べると、継承を回避することが良い方法であることがわかります。理由の 1 つは、次の問題に示されている可能性があります。
ここに、「ArrayList」を拡張するサブクラス「Stack」があります。
push()
前のコードで定義されたを使用してスタックに追加しclear()
、基本クラス (つまり ArrayList)を使用してスタックをクリアしたいとしましょう。
- ここで問題は
コードは正常にコンパイルされますが、基本クラスはスタック ポインターについて何も知らないため、Stack オブジェクトは未定義の状態になります。次に push() を呼び出すと、新しい項目がインデックス 2 (stack_pointer の現在の値) に置かれるため、スタックには実質的に 3 つの要素があり、下の 2 つはガベージです。
だから私の質問は、なぜですか
基本クラスはスタックポインタについて何も知りません
つまり、予約されているスタック ポインターの状態はどこにあるのでしょうか。
出典:拡張が悪い理由
cpu-registers - 保存されたフレーム ポインターがスタック フレームに存在するのはなぜですか?
SFP を使用して EBP を以前の値に復元することを読みました。EBP を初期値に戻す必要があるのはなぜですか?
debugging - Windbg の「dds esp」
dds esp
生の出力またはその 64 ビット版をdqs rsp
正しく理解しているかどうかはわかりません。スタック内のエントリのリストを見ると、リターン アドレスがどこにあるとしても、それらはまだ返されていないコードによって行われた呼び出しであると考える傾向があります。IOW、それらをつなぎ合わせると、素敵なコールスタックが形成されるはずです。(k*
今のところ、Windbg コマンドのグループを気にする必要はありません。) いつもそうではありませんか?
サードパーティの拡張機能がいくつかあるため、esp/rsp 出力で動作し、エントリを呼び出しスタックのように見えるものにまとめますが、その順序をソースに表示されているものと一致させることはできません (まあ、私が持っているソースは何でも.) ずっと前に返された関数のエントリさえあります。
私は何が欠けていますか?
アップデート:
OK -- 私が使っているサードパーティの拡張機能は次のように言っています:
Dumps (dps) from the stack limit the base only showing items that include the ! followed by +0x
それで、問題はそのエントリは何ですか?別の関数を呼び出すために修正している関数の戻りアドレスだと思いましたか?