Wo ist linux-vdso.so.1 im Dateisystem vorhanden?

Lesezeit: 1 Minute

Benutzeravatar von md.jamal
md.jamal

Ich lerne etwas über VDSO und habe eine einfache Anwendung geschrieben, die gettimeofday() aufruft

#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 auf der Binärdatei zeigt ‘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)

Ich habe nach der libvdso-Bibliothek gesucht und in meinem Dateisystem ist keine solche Bibliothek vorhanden.

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

Wo ist die Bibliothek präsent?

Es ist ein virtuelles gemeinsames Objekt, das keine physische Datei auf der Festplatte hat; Es ist ein Teil des Kernels, der beim Laden in den Adressraum jedes Programms exportiert wird.

Der Hauptzweck besteht darin, das Aufrufen bestimmter Systemaufrufe effizienter zu gestalten (die sonst anfallen würden Leistungsprobleme wie diese). Das prominenteste Wesen gettimeofday(2).

Hier kannst du mehr darüber lesen: http://man7.org/linux/man-pages/man7/vdso.7.html

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

Erträge

/lib/modules/4.15.0-108-generic/vdso/vdso64.so
/lib/modules/4.15.0-108-generic/vdso/vdso32.so
/lib/modules/4.15.0-108-generic/vdso/vdsox32.so

1397010cookie-checkWo ist linux-vdso.so.1 im Dateisystem vorhanden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy