首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >linux-vdso.so.1位于文件系统的什么位置

linux-vdso.so.1位于文件系统的什么位置
EN

Stack Overflow用户
提问于 2019-11-01 17:42:23
回答 2查看 23.2K关注 0票数 33

我正在学习VDSO,写了一个简单的应用程序,它调用gettimeofday()

代码语言:javascript
运行
复制
#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‘

代码语言:javascript
运行
复制
$ 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库,但我的文件系统中没有这样的库。

代码语言:javascript
运行
复制
sudo find / -name 'linux-vdso.so*'

库在哪里?

EN

回答 2

Stack Overflow用户

发布于 2019-11-01 17:46:44

它是一个虚拟共享对象,在磁盘上没有任何物理文件;它是内核的一部分,在加载时会导出到每个程序的地址空间中。

它的主要目的是更有效地调用某些系统调用(否则会导致performance issues like this)。最突出的是gettimeofday(2).

你可以在这里阅读更多信息:http://man7.org/linux/man-pages/man7/vdso.7.html

票数 47
EN

Stack Overflow用户

发布于 2020-07-13 13:11:29

代码语言:javascript
运行
复制
find / -name '*vdso*.so*' 

收益率

代码语言:javascript
运行
复制
/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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58657036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档