Syscall システムコール Linux カーネルトレース
Linux ユーザー空間では、システム コールを呼び出す必要があることがよくあります。 Linux バージョン 2.6.37 を例として、読み取りシステム コールの実装を追跡してみましょう。システム コールの実装は、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 です。
リーリー
__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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











多くのユーザーにとって、Android TV ボックスをハッキングするのは気が遠くなるように思えます。しかし、開発者の Murray R. Van Luyn は、Broadcom チップが不足する中、Raspberry Pi に代わる適切な代替品を探すという課題に直面しました。アルムビアとの共同作業

DeepSeekは、Webバージョンと公式Webサイトの2つのアクセス方法を提供する強力なインテリジェント検索および分析ツールです。 Webバージョンは便利で効率的であり、公式ウェブサイトは包括的な製品情報、ダウンロードリソース、サポートサービスを提供できます。個人であろうと企業ユーザーであろうと、DeepSeekを通じて大規模なデータを簡単に取得および分析して、仕事の効率を向上させ、意思決定を支援し、イノベーションを促進することができます。

DeepSeekをインストールするには、Dockerコンテナ(最も便利な場合は、互換性について心配する必要はありません)を使用して、事前コンパイルパッケージ(Windowsユーザー向け)を使用してソースからコンパイル(経験豊富な開発者向け)を含む多くの方法があります。公式文書は慎重に文書化され、不必要なトラブルを避けるために完全に準備します。

BitPie Bitpie ウォレット アプリをダウンロードするにはどうすればよいですか?手順は次のとおりです。 AppStore (Apple デバイス) または Google Play ストア (Android デバイス) で「BitPie Bitpie Wallet」を検索します。 「入手」または「インストール」ボタンをクリックしてアプリをダウンロードします。コンピューター版の場合は、BitPie ウォレットの公式 Web サイトにアクセスし、対応するソフトウェア パッケージをダウンロードしてください。

Bitgetは、スポット取引、契約取引、デリバティブなど、さまざまな取引サービスを提供する暗号通貨交換です。 2018年に設立されたこのExchangeは、シンガポールに本社を置き、安全で信頼性の高い取引プラットフォームをユーザーに提供することに取り組んでいます。 Bitgetは、BTC/USDT、ETH/USDT、XRP/USDTなど、さまざまな取引ペアを提供しています。さらに、この取引所はセキュリティと流動性について評判があり、プレミアム注文タイプ、レバレッジド取引、24時間年中無休のカスタマーサポートなど、さまざまな機能を提供します。

1. インストール環境 (Hyper-V 仮想マシン): $hostnamectlStatichostname:localhost.localdomainIconname:computer-vmChassis:vmMachineID:renwoles1d8743989a40cb81db696400BootID:renwoles272f4aa59935dcdd0d456501Virtualization:microsoftOperatingSystem:CentOS Linux7(Core)CPEOSName: CP:

世界をリードするデジタル資産交換であるOuyi Okxは、安全で便利な取引体験を提供するために、公式のインストールパッケージを開始しました。 OUYIのOKXインストールパッケージは、ブラウザに直接インストールでき、ユーザー向けの安定した効率的な取引プラットフォームを作成できます。インストールプロセスは、簡単で理解しやすいです。

Gate.ioは、インストールパッケージをダウンロードしてデバイスにインストールすることで使用できる人気のある暗号通貨交換です。インストールパッケージを取得する手順は次のとおりです。Gate.ioの公式Webサイトにアクセスし、「ダウンロード」をクリックし、対応するオペレーティングシステム(Windows、Mac、またはLinux)を選択し、インストールパッケージをコンピューターにダウンロードします。スムーズなインストールを確保するために、インストール中に一時的にウイルス対策ソフトウェアまたはファイアウォールを一時的に無効にすることをお勧めします。完了後、ユーザーはGATE.IOアカウントを作成して使用を開始する必要があります。
