問題タブ [stack-frame]
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.
assembly - アセンブリ内のEBP、ESP、およびスタックフレーム
次のコードで、EBP、ESP、スタックフレームについていくつか質問があります。
なぜespから28を引いたのですか?mainに2つのローカル変数xとyがあります。では、なぜ8を減算しなかったのでしょうか。
そして、値を右(または上)から左(または下)にスタックするように配置しませんか?では、なぜ[eax+4]ではなく[eax+8]に1を追加したのでしょうか。
c++ - Visual Studio (2008)、C++ で関数変数を含むスタック フレームを表示する方法
各スタック フレームで関数変数を視覚化するように Visual Studio (2008) を構成する方法はありますか? 関数パラメーターでコール スタックを正常に表示できますが、関数内の変数も表示する方法があるかどうか疑問に思っていました。これは、スタックの内容を検査し、再帰関数呼び出しがどのように機能するかを学習するのに特に役立ちます。どうもありがとう。
c - gccオプションを理解しようとしています-fomit-frame-pointer
gcc
私はGoogleにオプションの意味を教えてくれるように頼みました-fomit-frame-pointer
。それは私を以下のステートメントにリダイレクトします。
-fomit-frame-pointer
フレームポインタを必要としない関数のレジスタにフレームポインタを保持しないでください。これにより、フレームポインタを保存、設定、および復元する手順が回避されます。また、多くの機能で追加のレジスタを使用できるようにします。また、一部のマシンではデバッグが不可能になります。
各関数に関する私の知識によれば、すべてのローカル変数といくつかの詳細情報を保持するために、プロセスメモリのスタックにアクティベーションレコードが作成されます。このフレームポインタが関数のアクティベーションレコードのアドレスを意味することを願っています。
この場合、フレームポインタをレジスタに保持する必要のない関数の種類は何ですか?この情報を入手したら、(可能であれば)それに基づいて新しい関数を設計しようとします。フレームポインタがレジスタに保持されていない場合、一部の命令がバイナリで省略されるためです。これにより、多くの機能があるアプリケーションでパフォーマンスが大幅に向上します。
c++ - C言語の関数プロローグとエピローグ
ネストされた関数呼び出しのデータはスタックに送られることを知っています。スタック自体は、関数が呼び出されたり戻ったりするときにスタックからデータを格納および取得するための段階的なメソッドを実装しています。これらのメソッドの名前は、プロローグおよびエピローグ。
このトピックに関する資料を検索しようとしましたが、成功しませんでした。関数プロローグとエピローグがCで一般的にどのように機能するかについてのリソース(サイト、ビデオ、記事)を知っていますか?または、説明できればさらに良いでしょう。
PS:あまり詳細ではなく、一般的な見方が欲しいだけです。
debugging - ESP と EBP の間は何ですか?
そうです、これは暗黙のうちに何度も答えられていると確信していますが、私はそれに完全に到達することができないようです.
(x86) スタック トレースがあり (たとえば、WinDbg で確認)、レジスタを確認すると、EBP と ESP の値が x バイト離れているとはどういう意味でしょうか?
リンク:
- https://stackoverflow.com/a/3699916/321013
- https://stackoverflow.com/a/2466587/321013
- https://stackoverflow.com/a/5738940/321013
私が持っていた最近のスタックトレースの例を挙げると:
ESP の値1ac5ee8c
- EBP 1ac5eef4
= 104 バイトの差。それで何が入ってるの?
exception - MIPS アセンブリ サブルーチンとスタック、例外 5 不良データ アドレス、ストア内の例外 7 アドレス エラー
私はアセンブリを使用してスタック フレーム ビジネスを理解しようとしていますが、自分が何をしているのかほとんどわかりません...でも、近いと思いますか?
私のプログラムは、10 からカウントダウンして終了するサブルーチンを呼び出します。これは実際にはうまくいくようですが、いくつかの例外エラーが発生しています。
ここに私の出力があります
これが私のコードです:
assembly - アセンブリ言語でのスタック フレームへのアクセス
私はアセンブリが初めてで、この記事に出くわしました
このコードは
これに等しい
このビデオによると、ベース ポインターの上のスタックの値にアクセスするには、追加する必要があります。それがポインターの下にある場合は、減算する必要があります。上記の例を考えると、必要な変数の場所を移動するためにベースポインターから何かを差し引いていますが、これはビデオで述べられていることとは反対です。
私は何を取りこぼしたか?sub esp,12 はローカル変数にスペースを割り当てていることを知っているので、EBP がその割り当てを下回っていることを念頭に置いているので、マイナスではなく [ebp + 何か] である必要があると考えています。
彼がこのサブ esp 12 を実行したとき、スタックは次のようになります。
記事が間違っていたのですか、それとも私が解釈を誤ったのでしょうか?
c# - 呼び出しメソッド名を条件ステートメントの条件として使用する
呼び出し元のメソッドの名前を取得し、その結果に基づいてコードを実行することはできますか?
以下に、データベースの CRUD 操作に使用される 2 つのメソッドを示します。1 つはオブジェクトをデータベースに追加し、もう 1 つは更新します。どちらも、オペレーションの統計レポートを含むオブジェクトを返します。
特定の条件下で、Update メソッド内のオペレーション stat オブジェクトの pkey フィールドをわざわざ更新する必要はありません (それが stat-obj を Add メソッドに返す場合)。
c++ - 呼び出し元/呼び出し先スタック フレームの一部を共有することはありますか?
私は疑問に思っていましたが、これらのシナリオはコンパイラで実行できるのでしょうか?
最初に SomeDataType を次のように定義します。
シナリオ #1 _次のような参照パラメーターを持つ呼び出し先関数について:
関数がインラインではなく、呼び出し元関数のスコープ内の変数のみがプログラム内のこの関数に渡されると仮定し、参照が必ずしもポインターではないという事実に関して、入力引数が配置されるメモリの部分はスタックフレーム間で共有されますこれにより、「doSomething」は、そのスタックの開始アドレスを決定するベース ポインターにオフセットを追加することによって、そのローカル スコープ内の任意のローカル変数をアドレス指定するのと同じ方法で、そのパラメーターをアドレス指定できます。フレーム。
シナリオ #2 _これは私にはありそうにないように思えますが、とにかく; タイプ「SomeDataType」の構造体を返す呼び出し先関数に関して:
構造体「someStruct」が存在するメモリの部分は、任意の呼び出し元のスタック フレームと「doSomething」呼び出し先関数のスタック フレームの間で共有されるため、呼び出し元関数の次のステートメントを検討してください。
その呼び出し元のスコープで「TheStruct」を使用すると、呼び出し先のスコープ内の「SomeStruct」が存在するメモリの同じ部分を使用することになり、基本的に呼び出し先関数は「someStruct」をどこにもコピーしません。宛先が呼び出し元スコープ内の構造体ではないことを示す、呼び出し元関数内の次のようなステートメントでした。
その共有部分の内容をそのポインターが示す場所にコピーするのは呼び出し元の義務です。