Где в файловой системе присутствует linux-vdso.so.1 - PullRequest
2 голосов
/ 01 ноября 2019

Я изучаю VDSO, написал простое приложение, которое вызывает gettimeofday ()

#define _GNU_SOURCE
#include <sys/syscall.h>
#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    struct timeval current_time;

    if (gettimeofday(&current_time, NULL) == -1)
        printf("gettimeofday");

    getchar();

    exit(EXIT_SUCCESS);
}

ldd для бинарных шоу 'linux-vdso'

$ ldd ./prog
    linux-vdso.so.1 (0x00007ffce147a000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6ef9e8e000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f6efa481000)

Я нашелдля библиотеки libvdso, и в моей файловой системе такой библиотеки нет.

sudo find / -name 'linux-vdso.so*'

Где находится библиотека?

1 Ответ

7 голосов
/ 01 ноября 2019

Это виртуальный общий объект, у которого нет физического файла на диске;это часть ядра, которая экспортируется в адресное пространство каждой программы при загрузке.

Основная цель - сделать более эффективными вызовы определенных системных вызовов (которые в противном случае могли бы вызвать проблемы производительности, подобные этой ). Наиболее выдающимся из них является gettimeofday(2).

Подробнее об этом можно прочитать здесь: http://man7.org/linux/man-pages/man7/vdso.7.html

...