問題タブ [kprobe]
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.
linux - Systemtap - カーネル空間から syscall を呼び出す
Systemtap Embedded C コードから直接sys_linkを呼び出して、ハード リンクを作成しようとしています。基本的に、コードは次のようになります。
sys_link はカーネルによってエクスポートされないため、初期化時にkallsyms_lookup_name()を使用してpsys_linkが解決され、アドレスが正しく解決されていることをテストできました。システムコールが呼び出されているようですが、戻りません。
*カーネル空間からシステムコールを呼び出すのが最善のアイデアではないことはわかっていますが、私を信じてください。これを行う必要があります;) *
一方、別の簡単なテストを行って、カーネルによってエクスポートされたfilp_openを呼び出し、syscall でさえなく、単なるカーネル関数であり、同じ失敗した結果のファイルを作成しました。
カーネルがフリーズする理由は何ですか?
更新: syscall と関数は、syscall.open.returnプローブのコンテキストで呼び出されます。コメントの 1 つで説明されているように、Systemtapリターン プローブはkretprobeを使用して実装されます ... これは、トランポリンの関数リターン アドレスを置き換えます ... これは、syscall ルーチンが既に終了しており、これにより、関連するロックが解放されている必要があることを意味しますファイルシステム自体ですが、おそらく何かが欠けています。
その時点でカーネルをデバッグすると、次のトレースバックが表示されます。明らかに、デッドロックは kprobe ロックにあります。
注: これは ARM マシンのトレースバックですが、同じ結果が i386 でも発生します。
linux-kernel - kprobe_events fetch-args は x86 では機能しますが、arm64 では機能しません
do_sys_open
ファイル名引数を文字列として取得したかった。このために、 kprobe に続いてkprobetrace.txtを追加しました。ファイル名を 16 進数で指定する単純なプローブは、両方で機能しx86/arm64
ます。
ただし、プローブを変更してファイル名の文字列を取得することはできますが、機能しx86
ませんarm64
(つまり、文字列表現を取得できませんfilename_string=(fault)
) 。
x86:
アーム64:
アーム ABI を正しく使用しているかどうかを確認するために、 を使用してプローブを設定してみperf
ました。から見た perf によって作成されたプローブ/sys/kernel/debug/tracing/kprobe_events
は類似していました
しかし、perf プローブも失敗していました (つまりfilename_string=""
、この場合)。
kprobe_events
アームが引数を文字列としてフェッチするように設定する正しい方法は何でしょうか? ABI を間違って使用していますか?
linux - Linux/Golang : /sys/kernel/debug/tracing/kprobe_events にアクセスできません
LTS カーネル (4.19.75) で Arch Linux を実行しています。最近のカーネルで確認しましたが、同じ問題です。
私はdebugfsをマウントしており、ルートとしてこのファイルを見ることができます:
それにアクセスするGoプログラムを修正/実行/フォーク(好きなように名前を付けます。元のコードはこちらhttps://github.com/evilsocket/opensnitch )しようとします。これが何をするかです:
このエラーが表示されます(ルートとして実行)
また、基本的なシェル コマンドを使用して (root として) 書き込むこともできません。ファイルがそこにあるため、「そのようなファイルはありません」は奇妙です。
これらの特別なファイルに関する多くの情報を見つけることができません。ファイルにアクセスできませんでした。単純な「エコー」またはプログラムによるものです。
私のシステムで何が欠けているか、私をブロックしているのかわかりません。
私はUEFIブートで実行しており、セキュアブートが無効になっています(問題になる可能性のある場所で見られます)、私はまったく無知です。
どこを見ればよいか考えている人に感謝します。
敬具