首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法用最新的内核创建vDSO?

有没有办法用最新的内核创建vDSO?
EN

Stack Overflow用户
提问于 2019-03-26 21:08:26
回答 1查看 326关注 0票数 1

我正在尝试使用最新的内核源代码做一个vDSO。我一直在学习本教程,但是我没有在linux-4.20.13/ https://www.linuxjournal.com/content/creating-vdso-colonels-other-chicken?page=0,0 /x86/ vdso中找到像update_vsyscall()和vdso directory这样的函数。我的问题是:有没有一种方法可以使用新的内核代码创建一个虚拟的syscall,比如gettimeofday()?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-28 11:21:46

中的vdso目录

代码语言:javascript
复制
arch/x86/entry/vdso

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/arch/x86/entry/vdso?h=v4.20.13

例如,将函数直接添加到vclock_gettime.c中,重新构建内核,然后重新引导

代码语言:javascript
复制
diff --git a/arch/x86/entry/vdso/vclock_gettime.c b/arch/x86/entry/vdso/vclock_gettime.c
index 007b3fe9d727..a49bef48a9dc 100644
--- a/arch/x86/entry/vdso/vclock_gettime.c
+++ b/arch/x86/entry/vdso/vclock_gettime.c
@@ -238,3 +238,8 @@ notrace time_t __vdso_time(time_t *t)
 }
 time_t time(time_t *t)
    __attribute__((weak, alias("__vdso_time")));
+
+notrace int __vdso_add(int x, int y)
+{
+   return x + y;
+}
diff --git a/arch/x86/entry/vdso/vdso.lds.S b/arch/x86/entry/vdso/vdso.lds.S
index d3a2dce4cfa9..4b976c119845 100644
--- a/arch/x86/entry/vdso/vdso.lds.S
+++ b/arch/x86/entry/vdso/vdso.lds.S
@@ -25,6 +25,7 @@ VERSION {
            __vdso_getcpu;
            time;
            __vdso_time;
+           __vdso_add;
    local: *;
    };
 }

在用户模式下编写测试用例

gcc -otest test.c vdso64.so

代码语言:javascript
复制
#include <stdio.h>

extern int __vdso_add(int x, int y);

int main()
{
    printf("vdso_add: %d\n", __vdso_add(1, 3));
    return 0;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55357984

复制
相关文章

相似问题

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