我正在尝试从 RAM 转储中在我的程序中分配一个新的 VDSO。我在“Linux user1-vbox 3.2.0-55-generic-pae #85-Ubuntu SMP Wed Oct 2 14:03:15 UTC 2013 i686 i686 i386 GNU/Linux”上
问题是 :
- 内存替换工作得很好
- 通常调用 __kernel_vsyscall 的调用 *%gs:0x10 完全丢失
问题是每次我运行我的程序时,%gs 都是一样的(0x33),但是必须有一些东西一直告诉 proc“VDSO 在这里”,并且我想修改为“嘿,不,现在,VDSO 就在那里”。
我在 Google 上搜索了一下,发现 VDSO 地址在两个变量的帮助下保存在进程内存中:AT_SYSINFO 和 AT_SYSINFO_EHDR。两者都属于一个名为“auxv”的数组,该数组位于堆栈中 argc、argv 和 envp 之后。
但是即使我修改了这个值,我的进程仍然会找到一种方法来知道它的 VDSO 在哪里。有什么办法 ?