4

ここに簡単なサンプルプログラムがあります。(これは基本的に、プロセスに関連付けられたprocmapを取得します)

> cat sample.c

#include<stdio.h>

int main() 
{
    char buffer[1000];
    sprintf(buffer, "cat /proc/%d/maps\n", getpid());
    int status = system(buffer);
    return 1;
}

静的に準備する

> gcc -static -o sample sample.c 
> file sample
sample: ELF 64-bit LSB  executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=9bb9f33e867df8f2d56ffb4bfb5d348c544b1050, not stripped

バイナリの実行

> ./sample
00400000-004c0000 r-xp 00000000 08:01 12337398                           /home/admin/sample
006bf000-006c2000 rw-p 000bf000 08:01 12337398                           /home/admin/sample
006c2000-006c5000 rw-p 00000000 00:00 0 
0107c000-0109f000 rw-p 00000000 00:00 0                                  [heap]
7ffdb3d78000-7ffdb3d99000 rw-p 00000000 00:00 0                          [stack]
7ffdb3de7000-7ffdb3de9000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]

vDSOについてググっのですが、よくわかりませんでした。ウィキペディアは、「これらは、ユーザー空間からカーネルルーチンにアクセスできる方法です」と述べています。私の質問は、静的バイナリの実行時にこれらの共有オブジェクトが表示されるのはなぜですか?

4

1 に答える 1

2

私の質問は、静的バイナリの実行時にこれらの共有オブジェクトが表示されるのはなぜですか?

それらは、カーネルがすべてのプロセスに「注入」するために表示されます。

詳細については、こちらこちらをご覧ください。

于 2015-07-03T13:39:10.040 に答える