Перемещение VDSO на лету

Я пытаюсь выделить новый VDSO внутри моей программы из дампа памяти. Я нахожусь на "Linux user1-vbox 3.2.0-55-generic-pae #85-Ubuntu SMP Ср 2 октября 14:03:15 UTC 2013 i686 i686 i386 GNU/Linux"

Проблема в:

  • Замена памяти работает отлично
  • вызов *%gs:0x10, который обычно вызывает __kernel_vsyscall, полностью потерян

Дело в том, что каждый раз, когда я запускаю свою программу, %gs одинаков (0x33), но должно быть что-то, что постоянно говорит процессу "VDSO здесь", и что я хотел бы изменить, чтобы сказать "эй, нет теперь ВДСО есть ".

Я немного искал в Google и обнаружил, что адрес VDSO хранится в памяти процесса с помощью двух переменных: AT_SYSINFO и AT_SYSINFO_EHDR. Оба принадлежат массиву с именем "auxv", который находится в стеке сразу после argc, argv и envp.

Но даже когда я изменяю это значение, мой процесс все равно находит способ узнать, где находится его VDSO. Какой способ?

0 ответов

Другие вопросы по тегам