【发布时间】:2018-11-21 17:15:28
【问题描述】:
我目前正在尝试实现我自己的 VDSO。我使用了this tutorial,它解释了如何为 2.6 内核执行此操作。
我测试了它,我得到了这个工作。 (我成功地创建了一个内核变量并从用户态访问它。)
有没有办法在内核中知道何时调用了 vdso?我认为这不能同步完成(因为 vdso 是在用户空间中处理的)。但是内核是否有任何可能性(甚至是肮脏的)知道该函数是否已被调用(可能带有硬件断点或其他东西)?
我想做的是类似于此代码中的函数my_vdso_has_been_called()):
void update_vsyscall(/* […] */) {
// […]
if(my_vdso_has_been_called())
do_something();
}
注意:函数update_vsyscall可以在arch/x86/kernel/vsyscall_64.c中找到
【问题讨论】:
-
SystemTap之类的东西可以对您的__vdso_myvdso被调用做出反应吗? -
如果我理解得很好,SystemTap 是一个只能从内核外部调用的工具。所以除非有在内核模式下运行的等效工具,否则我不这么认为。但如果我错了,请纠正我。
-
SystemTap 将代码编译到内核中。
标签: linux kernel linux-kernel system-calls