問題タブ [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.
assembly - スタックポインタが指しているx86?
たとえば、斧を押した場合、[SP] は斧の値または斧の後の単語を指しますか? また、リアルモードとプロテクトモードの違いはありますか? これは、Art of assembly book が、sp が最後にプッシュされたデータを指すように説明および説明しているためです。
assembly - pushl / popl%espのアセンブリレベルの表現とは何ですか?
スタックポインタレジスタをプッシュおよびポップする動作を理解しようとしています。AT&Tの場合:
と
計算された値をに戻すことに注意してください%esp
。
私はこれらの指示を順番にではなく、独立して検討しています。に格納されている値%esp
は常にインクリメント/デクリメント前の値であることを知っていますが、アセンブリ言語で動作をどのように表すことができますか?これは私がこれまでに思いついたものです。
pushl %esp
(FLAGSと一時レジスタへの影響を無視して):
の場合popl %esp
:
これは正しいです?そうでない場合、どこが間違っているのですか?
x86 - スタック ポインタ レジスタはどのように機能しますか
さて、スタックはどのように機能しますか?たとえば、命令:
に等しい:
ここで、sp はスタック ポインタです。そうですか?
私の質問は、sp レジスタから 4 を減算するポイントは何ですか?
c++ - ブースト例外により、スタック ポインターが破損する (実行時チェックの失敗 #0 ...)
小さなプロジェクトで、いくつかのブースト パッケージ (asio、property_tree、filesystem など) を使用していますが、ブースト パッケージのどこかで例外がスローされるまで、すべてが正常に機能することに注意する必要がありました。これらすべてのパッケージで発生しますが、次の最小限のプログラムに要約することができました。
例外は正常にスローされますが、プログラムが終了すると取得されます
私はこれをデバッグしようとしました (私はビジュアル スタジオ 2010 Express でブースト 1.49.0 を使用し、crt を静的にリンクしています)、すべての可視コードが既に実行されている場合に問題が発生します。std:exception デストラクタが通過しなかったことがわかりますが、その後 (プログラムの return ステートメントの "in" で) メッセージ ボックスがトリガーされます。
編集:いくつかの追加情報:
- 上記の最小限のプログラムでは、boost はヘッダーのみを使用しています
- 他の lib ファイルは関係ありません
- プログラムによって読み込まれるのは、ntdll.dll と kernel32.dll だけです。
- 追加のスレッドは作成されていません
- CRTに対して動的にリンクすると、問題も発生します
EDIT2:再び詳細情報:
- 上記のプログラムに追加されたインクルード
- 代わりに runtime_error をスローすると、問題も発生します
- (...) または (std::exception) で例外をキャッチすると、問題は解決します
- 例外を再スローすると、問題は解決したままです
assembly - x64 アセンブリでのスタックの配置
28h
から減算される (10 進数 40)の値はrsp
、次のように計算されます。
から: http://www.japheth.de/JWasm/Win64_1.html
私の理解では、20h
使用している各値は 8 バイトから 4 であるため、減算するだけで済みます20h
。では、なぜ が28h
減算され、それがどのようにして 16 バイトのアラインメントになるのでしょうか?
引数が 4 つ未満の関数にはスタック領域の予約が必要ですか?も参照してください。
x86 - スタックから値を POP できますが、NASM アセンブリのどこにも配置できませんか?
NASM アセンブリ、Ubuntu、32 ビット プログラム。
通常、スタックから値をポップするときは、
レジスタまたは変数に。しかし、スタック内の次の要素を取り除きたいだけで、どこにも置きたくない場合もあります。やっている
うまくいかないのと同じように。
私が持っていた回避策は、まったく使用しない 4 バイトの変数を作成し、それにダンプするPOP
ことでした。これを達成するためのより良い方法はありますか?
assembly - スタックのバランスをとる
このようにスタックをセットアップすると
する必要がありますか
またはのみ
?