0

我正在对 Dirty Cow 漏洞进行学校研究。在我的研究中,我发现了一些解决方案(例如这个),它们将一些 shellcode 注入到 vDSO(到函数中__vdso_clock_gettime)。

此解决方案及其所有衍生方案使用硬编码常量作为__vdso_clock_gettimevDSO 中符号的偏移量。然而,此常量并非对所有版本的内核和 vDSO 都有效(至少不适用于 Android 设备)。

有没有更好的方法在 C/C++ 中找到 vDSO 中符号的地址(偏移量)?我试过了

handle = dlopen("[vdso]", RTLD_LAZY);

作为的[vdso]输出

dladdr((void*)vdso_addr, &dlinfo);
LOG("dladdr: %s", dlinfo.dli_fname);

vdso_addr找到了,/proc/self/auxv但我得到了dlopen failed: library "[vdso]" not found

我知道 vDSO 是一个系统问题,普通程序不应该决定是否从中调用函数,但是有没有一些通用的方法可以在 C/C++ 中找到符号的地址,而无需反汇编 vDSO 的每个可能版本并制作地址数据库?

在对 vDSO 的虚拟系统调用期间,系统如何获取符号地址?

4

0 回答 0