Android — Как найти адреса символов в VDSO, данный адрес VDSO?

Я работаю над школьным исследованием уязвимости Грязной Коровы. Во время моего исследования я нашел некоторые решения (например, этот), которые вводят некоторый шеллкод в vDSO (в функцию __vdso_clock_gettime).

Это решение и все его производные используют жестко закодированную константу в качестве смещения для символа __vdso_clock_gettime в рамках vDSO. Однако эта константа не действительна для всех версий ядра и vDSO (по крайней мере, для устройств Android).

Есть ли лучший способ найти адрес (смещение) символа внутри vDSO в C / C ++? Я старался

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

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]