問題タブ [assembly-trap]
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.
exception-handling - カーネル ソフトウェア トラップの処理
Windows Internals に関する本を読んでいますが、理解できないことがあります。
「カーネルは、ハードウェア割り込み処理の一部として、またはスレッドがソフトウェア割り込みに関連するカーネル関数を呼び出すときに同期的にソフトウェア割り込みを処理します。」
これは、ソフトウェア割り込みまたは例外が次の条件下でのみ処理されることを意味します。
****a. カーネルが、ソフトウェア例外 (トラップ) に関連するスレッドから関数を実行している場合 b. すでにハードウェア トラップを処理している場合****
これについての私の理解は正しいですか?
次のビット:
「ほとんどの場合、カーネルは、トラップを処理する他の関数に制御を転送する前後に、一般的なトラップ処理タスクを実行するフロントエンド トラップ処理関数をインストールします。」
「フロントエンド トラップ処理関数」と「フィールド ザ トラップ」の意味がよくわかりません。
誰でも私を助けることができますか?
c++ - gdb を使用して SIGTRAP をデバッグするには?
私のプログラムでは SIGTRAP シグナルを使用しています。gdb を使用してプログラムをデバッグしたいと考えています。ただし、プログラムで SIGTRAP が発生すると、gdb はトラップ ハンドラに入ることができません。
トラップハンドラーにシングルステップする方法は?
operating-system - トラップの発行が特権タスクではないのはなぜですか?
本「オペレーティング システムの概念」に関する質問への回答では、トラップの発行が特権タスクではないことを示しています。どうしてこんなことに?
exception - トラップ命令によるハードウェアまたはソフトウェアの割り込みまたは例外?
マニュアルによると
トラップ命令
プログラムがトラップ命令を発行すると、プロセッサはソフトウェア トラップ例外を生成します。通常、プログラムがオペレーティング システムによるサービスを必要とする場合、プログラムはソフトウェア トラップを発行します。オペレーティング システムの一般的な例外ハンドラは、トラップの理由を判断し、適切に応答します。
しかし、私が以前にそれについて尋ねたとき、答えはそれがソフトウェア割り込みであると言います:
また、例外と割り込みの違いは、アーキテクチャによってわずかに異なる可能性があるため、hw、sw、例外、割り込みの 4 つの組み合わせ (?) が存在する可能性があるようです。
現在、私は小さなシステム用にこのアセンブリを研究しており、個々の命令を自分で学ぶことができると思いますが、イベントがハードウェア例外ではなくソフトウェア例外である理由、ハードウェア例外である理由を全体像を理解するための助けを探しています。割り込み、ソフトウェア割り込み。
operating-system - 命令が特権モードで実行されているかユーザー モードで実行されているかは、どのようにしてわかりますか?
クラスで教授は、「[アセンブリ]命令は、それが特権モードで実行されているかユーザーモードで実行されているかを認識しています。トラップが生成された場合、それはユーザーモードだからです」.
まず、トラップではなく、コマンドをユーザーモードで実行できないという特定のトラップであると想定しています。
次に、これは非常に効率が悪いようです。コマンド全体を実行して、トラップがあったかどうかを確認してください。フラグが設定されていないのはなぜですか?これは、うまくいかなかった場合、問題があることがわかっていると言っているようなものではありませんか? では、実際に確認する方法はありませんか?
arm - ARM HYPERVISOR: 単一命令の実行とトラップ (Intel の MTF に相当)
ARM にハイパーバイザーを実装していますが、デバッグ アーキテクチャ (v7.1) に依存せずに、1 つの命令の実行後にゲストを再開 ( ERET ) してトラップする方法があるかどうかを知る必要があります。ゲストの次の命令をHVC (Intel のVMCALLに相当) に変更することでソフトウェア アプローチを使用できますが、分岐 ( JMP )を引き起こす命令を処理する方法がわかりません。
Intel では、トラップ フラグ(= RFLAGSのTFビット、OS スレッド コンテキストごと) またはモニター トラップ フラグ(= MTF、VT-x機能) のいずれかを使用できます。
ありがとうございました
編集:説明
- 分解・エミュレーションは極力避けたい
linux - GDB で SIGSEGV を引き起こした CPU トラップを特定しますか?
SIGSEGV
ライブラリコードで実行しているプログラムがあります。原因となっているステートメントを見ても、何も飛び出していませんSIGSEGV
(以下を参照)。しかし、コードは Intel の AES-NI を使用しており、私はそれに精通していません。
handle all
を引き起こしているトラップをキャッチすることを期待して発行しましSIGSEGV
たが、プログラムはトラップを通知するのではなく、クラッシュするだけです。
エラーの原因となっている CPU トラップを GDB に表示させるにはどうすればよいSIGSEGV
ですか?
interrupt - ページ フォールトがトラップと見なされる理由
ページ フォールトが割り込みではなくトラップと見なされるのはなぜですか? また、セグメンテーション違反が発生するまでヌル ポインターにアクセスしようとすると、どのような段階が発生するのでしょうか? そして、この状況で送信される信号は、I SIGILL ですよね? ありがとう!
exception - Does running an interrupt handler create a new process, or is it part of an existing process?
From the beginning of https://en.wikipedia.org/wiki/Interrupt, there are three different kinds of interrupts:
a hardware interrupt,
A software interrupt caused by an exceptional condition in the processor itself (often called a trap or exception)
A software interrupt caused by executing a special instruction in the instruction set. (For example system calls)
My question is that when a cpu switches to run an interrupt handler,
is a new process created for running the interrupt handler?
Or is the running of the interrupt handler part of an existing process, e.g.
- in the first kind of interrupt, the process which requests some service from a hardware device and then waits for the hardware interrupt which indicates that the device operation finishes,
- the process which causes an exception in the second kind of interrupt,
- the process which makes the system call in the third kind of interrupt.