我目前正在尝试实现我自己的VDSO。我见过本教程这解释了如何做到这一点。
但是,本教程是针对 Linux 2.6.x 编写的,我想在 Linux 4.8.x 上使用它。但自该版本以来,vdso 的架构结构发生了很大变化(例如 vextern.h 已被抑制),我不知道如何调整它以使其正常工作。
您知道我如何调整本教程以适应最新的内核吗?或者我可以在哪里找到足够的有关 vdso 的资源来实现我自己的?
另外,您知道我是否可以简单地将任意系统调用的行为重新创建为 VDSO?我知道从安全角度来看这是一个非常糟糕的主意(并且性能增益可以忽略不计)
答案1
我不确定是否有相同风格的更新教程,但更改是有限的:
arch/x86/vdso
搬去arch/x86/entry/vdso
;- 变量声明已大大简化。
后者意味着您只需使用arch/x86/include/asm/vvar.h
宏在固定偏移处声明变量一次DECLARE_VVAR
。要定义它,请使用DEFINE_VVAR
宏;要访问它,请使用VVAR
宏。上面的链接提交有许多示例(共享变量的所有现有用途)。
您无法在 vDSO 中重新创建任意系统调用的行为,至少不能在内核模式下调用内核。 vDSO 仅对可在用户空间中处理的调用真正有用;这些并不多。