検索
ホームページシステムチュートリアルLinuxSyscall システムコール Linux カーネルトレース

Syscall システムコール Linux カーネルトレース

Feb 12, 2024 pm 09:21 PM
linuxLinuxチュートリアルLinuxシステムLinuxコマンドシェルスクリプト埋め込みLinuxLinux を始めるLinux学習

Linux ユーザー空間では、システム コールを呼び出す必要があることがよくあります。 Linux バージョン 2.6.37 を例として、読み取りシステム コールの実装を追跡してみましょう。システム コールの実装は、Linux のバージョンによって異なる場合があります。

Syscall システムコール Linux カーネルトレース

一部のアプリケーションでは、次の定義が見られます:

リーリー

実際に呼び出されるのは、システム関数 syscall(SYS_read)、つまり sys_read() 関数です。 Linux バージョン 2.6.37 では、この機能はいくつかのマクロ定義によって実装されます。

Linux システム コール (SCI、システム コール インターフェイス) は、実際にはマルチチャネルの集約と分解のプロセスであり、集約ポイントは 0x80 割り込みエントリ ポイント (X86 システム構造) です。つまり、すべてのシステム コールはユーザー空間から 0x80 割り込みポイントまで集約され、同時に特定のシステム コール番号が保存されます。 0x80 割り込みハンドラが実行されている場合、システム コール番号に応じて異なるシステム コールが個別に処理されます。つまり、異なるカーネル関数が呼び出されて処理されます。

システムコールを発生させるには 2 つの方法があります:

(1) int $0×80、これは古い Linux カーネル バージョンでシステム コールを引き起こす唯一の方法です。

(2) sysenter の組み立て説明書

Linux カーネルでは、次のマクロ定義を使用してシステム コールを実行できます。

リーリー

SYSCALL_DEFINE3 のマクロ定義は次のとおりです。

リーリー

## はマクロ内の文字が直接置換されることを意味します。
name = read の場合、マクロ内では __NR_##name が __NR_read に置き換えられます。 #NR##name はシステム コール番号、## は 2 つのマクロ展開を指します。つまり、「name」を実際のシステム コール名に置き換えて、__NR.... を展開します。 name == ioctl の場合、__NR_ioctl です。 リーリー

CONFIG_FTRACE_SYSCALLS マクロが定義されているかどうかに関係なく、最終的に次のマクロ定義が実行されます。

__SYSCALL_DEFINEx(x, sname, VA_ARGS) リーリー

次のタイプのマクロ定義が最終的に呼び出されます:

asmlinkage の長いシステム##name(__SC_DECL##x(VA_ARGS)) それが、前に説明した sys_read() システム関数です。
asmlinkage は、スタックから関数の引数のみを抽出するようにコンパイラーに指示します。すべてのシステムコールにはこの修飾子が必要です。これは、以前の記事 quagga で説明したマクロ定義に似ています。

つまり、マクロ定義内の次のコード:

リーリー

コード分析:

    fget_light(): fd で指定されたインデックスに従って、現在のプロセス記述子から対応するファイル オブジェクトを取得します (図 3 を参照)。
  • 指定されたファイル オブジェクトが見つからない場合は、エラー
  • が返されます。
  • 指定されたファイル オブジェクトが見つかった場合:
  • file_pos_read() 関数を呼び出して、今回読み書きしたファイルの現在位置を取得します。
  • vfs_read() を呼び出してファイル読み取り操作を実行し、この関数は最終的に file->f_op.read() で指定された関数を呼び出します。コードは次のとおりです。
  • if (ファイル->f_op->読み取り)
  • ret = file->f_op->read(file, buf, count, pos);


file_pos_write() を呼び出して、ファイルの現在の読み取りおよび書き込み位置を更新します。

  • fput_light() を呼び出して、ファイルの参照カウントを更新します。
  • 最後に、読み込んだデータのバイト数を返します。
  • この時点で、仮想ファイルシステム層の処理が完了し、ext2ファイルシステム層に制御が渡されます。

以上がSyscall システムコール Linux カーネルトレースの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は良许Linux教程网で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Linux操作とは何ですか?Linux操作とは何ですか?Apr 13, 2025 am 12:20 AM

Linuxオペレーティングシステムのコアは、コマンドラインインターフェイスで、コマンドラインを介してさまざまな操作を実行できます。 1.ファイルおよびディレクトリ操作は、ファイルとディレクトリを管理するために、LS、CD、MKDIR、RM、その他のコマンドを使用します。 2。ユーザーおよび許可管理は、useradd、passwd、chmod、その他のコマンドを介してシステムのセキュリティとリソースの割り当てを保証します。 3。プロセス管理は、PS、Kill、およびその他のコマンドを使用して、システムプロセスを監視および制御します。 4。ネットワーク操作には、Ping、Ifconfig、SSH、およびネットワーク接続を構成および管理するためのその他のコマンドが含まれます。 5.システムの監視とメンテナンスは、TOP、DF、DUなどのコマンドを使用して、システムの動作ステータスとリソースの使用を理解します。

Linuxエイリアスを使用したカスタムコマンドショートカットで生産性を高めますLinuxエイリアスを使用したカスタムコマンドショートカットで生産性を高めますApr 12, 2025 am 11:43 AM

導入 Linuxは、柔軟性と効率性により、開発者、システム管理者、およびパワーユーザーが好む強力なオペレーティングシステムです。しかし、頻繁に長く複雑なコマンドを使用することは退屈でERです

Linuxは実際に何に適していますか?Linuxは実際に何に適していますか?Apr 12, 2025 am 12:20 AM

Linuxは、サーバー、開発環境、埋め込みシステムに適しています。 1.サーバーオペレーティングシステムとして、Linuxは安定して効率的であり、多くの場合、高電流アプリケーションの展開に使用されます。 2。開発環境として、Linuxは効率的なコマンドラインツールとパッケージ管理システムを提供して、開発効率を向上させます。 3.埋め込まれたシステムでは、Linuxは軽量でカスタマイズ可能で、リソースが限られている環境に適しています。

Linuxで倫理的ハッキングを習得するための必須ツールとフレームワークLinuxで倫理的ハッキングを習得するための必須ツールとフレームワークApr 11, 2025 am 09:11 AM

はじめに:Linuxベースの倫理的ハッキングでデジタルフロンティアを保護します ますます相互に接続されている世界では、サイバーセキュリティが最重要です。 倫理的なハッキングと浸透テストは、脆弱性を積極的に特定し、緩和するために不可欠です

Linuxの基本を学ぶ方法は?Linuxの基本を学ぶ方法は?Apr 10, 2025 am 09:32 AM

基本的なLinux学習の方法は次のとおりです。1。ファイルシステムとコマンドラインインターフェイス、2。LS、CD、MKDIR、3。ファイルの作成と編集などのファイル操作を学習するマスター基本コマンド、4。

Linuxの最も使用は何ですか?Linuxの最も使用は何ですか?Apr 09, 2025 am 12:02 AM

Linuxは、サーバー、組み込みシステム、デスクトップ環境で広く使用されています。 1)サーバーフィールドでは、Linuxは、その安定性とセキュリティにより、Webサイト、データベース、アプリケーションをホストするための理想的な選択肢となっています。 2)埋め込みシステムでは、Linuxは高いカスタマイズと効率で人気があります。 3)デスクトップ環境では、Linuxはさまざまなユーザーのニーズを満たすために、さまざまなデスクトップ環境を提供します。

Linuxの欠点は何ですか?Linuxの欠点は何ですか?Apr 08, 2025 am 12:01 AM

Linuxの欠点には、ユーザーエクスペリエンス、ソフトウェア互換性、ハードウェアサポート、学習曲線が含まれます。 1.ユーザーエクスペリエンスは、WindowsやMacOほどフレンドリーではなく、コマンドラインインターフェイスに依存しています。 2。ソフトウェアの互換性は他のシステムほど良くなく、多くの商用ソフトウェアのネイティブバージョンがありません。 3.ハードウェアサポートはWindowsほど包括的ではなく、ドライバーは手動でコンパイルされる場合があります。 4.学習曲線は急で、コマンドラインの操作をマスターするには時間と忍耐が必要です。

Linuxは学ぶのが難しいですか?Linuxは学ぶのが難しいですか?Apr 07, 2025 am 12:01 AM

linuxisnothardtolearn、butthedifficultydependsonyourbackgroundandgoals.forthosewithosexperience、特にcommand-llinefamparsition、linuxisaneasyytransition.beginnersmayteeper relearningcurvebutcanagewithpersources.linux'sopen-sourcenature

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター