我正在学习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(¤t_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*'
库在哪里?
发布于 2019-11-01 17:46:44
它是一个虚拟共享对象,在磁盘上没有任何物理文件;它是内核的一部分,在加载时会导出到每个程序的地址空间中。
它的主要目的是更有效地调用某些系统调用(否则会导致performance issues like this)。最突出的是gettimeofday(2)
.
你可以在这里阅读更多信息:http://man7.org/linux/man-pages/man7/vdso.7.html
发布于 2020-07-13 13:11:29
find / -name '*vdso*.so*'
收益率
/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
https://stackoverflow.com/questions/58657036
复制相似问题