如果在vDSO的地址中找到vDSO中的符号地址?

时间:2018-03-01 13:15:38

标签: android c++ linux-kernel shared-libraries vdso

我正在研究关于Dirty Cow漏洞的学校研究。在我的研究过程中,我发现了一些解决方案(例如this one)将一些shellcode注入vDSO(进入函数__vdso_clock_gettime)。

此解决方案及其所有派生使用硬编码常量作为vDSO中符号__vdso_clock_gettime的偏移量。但是,此常量对所有版本的内核和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期间,系统如何获取符号地址?

0 个答案:

没有答案