問題タブ [vdso]
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 - gettimeofday システムコールはどのように機能しますか?
gettimeofday
このページによると、x86-86 の syscall です(gettimeofday
ボックス内を検索するだけです)。
2 つのポインターを準備して関連する を呼び出すだけで、逆アセンブリは十分に簡単だと思いましたsyscall
が、その逆アセンブリはさらに多くのことを行っています。
そして、私はまったく見えませんsyscall
。
誰がそれがどのように機能するか説明できますか?
linux - `[stack]`、`[vdso]`、`[vsyscall]` mmap はどこから来るのですか?
Linux x86_64 を対象とする次のプログラムを検討してください。
情報:
これは基本的に無限ループです。
これをリンクしてストリップすると、ELF 実行可能ファイルが得られます。
ELF 実行可能ファイルでは、最初のプログラム ヘッダーLOAD
に、上記の mmaps (a.out) の最初のエントリを説明するマップが含まれています。(このヘッダーとコードをすべて取り除いても、同じマップが観察されます。) execve(2)
ELF ハンドラーを呼び出しfs/binfmt_elf.c
、プログラム ヘッダーを読み取り、ファイルの mmap を呼び出します。
私が理解していないのは、他の 3 つ (stack、vdso、vsyscall) がどこから来たのかということです。これらは ELF ファイルには記述されていないため、Linux カーネルはこれら 3 つの「匿名」または「特別」マップをデフォルトでセットアップする必要があります。
私の質問は、Linux カーネルがこれらの他の 3 つのマップをカーネル コードのどこ (またはどのように) 作成するのかということです。それらは execve 全体で継承されますか? fs/exec.c
それらが作成された場所が見えないようです。
c - vdso と vsyscall とは何ですか?
やったsudo cat /proc/1/maps -vv
出力を理解しようとしています。予想どおり、多くの共有ライブラリがメモリ マッピング セグメントにマップされていることがわかります。
最後に次のようなものがあります
vdso
とはどういうvsyscall
意味ですか? vsyscall はメモリのカーネル部分ですか? 誰かが問題に光を当てることができれば、それは素晴らしいことです。
linux - Identifying Ifuncs in the VDSO
I see in the vdso that all functions are marked as STT_FUNC instead of STT_GNU_IFUNC. Especially I know "gettimeofday" is an Ifunc.
Is it true that all the functions in the VDSO are Ifuncs so they aren't tagged as such? if not - Why aren't these functions tagged as Ifuncs?
See the following on Ubuntu:
linux - 静的バイナリの実行中に vdso が表示されるのはなぜですか?
ここに簡単なサンプルプログラムがあります。(これは基本的に、プロセスに関連付けられたprocmapを取得します)
静的に準備する
バイナリの実行
vDSOについてググったのですが、よくわかりませんでした。ウィキペディアは、「これらは、ユーザー空間からカーネルルーチンにアクセスできる方法です」と述べています。私の質問は、静的バイナリの実行時にこれらの共有オブジェクトが表示されるのはなぜですか?
debugging - vsyscall と vdso のデバッグ情報
perf ツールを使用して、centos 6.5 (カーネル バージョン: 2.6.32-431.el6.x86_64) でカーネル モジュールのプロファイルを作成しています。カーネル デバッグ情報パッケージを個別にインストールしました。[kernel.kallsyms] 関数の一覧は表示できますが、[vdso] と [vsyscall] に関連するシンボルが認識されず、16 進数で表示されます。
これら 2 つのライブラリのデバッグ情報を追加する方法はありますか?