У меня есть файл C внутри, в котором есть две очень маленькие подпрограммы, которые переопределяют getauxval,
unsigned long int __wrap_getauxval (unsigned long int __type) {
printf("foobar");
exit(5);
}
unsigned long int getauxval (unsigned long int __type) {
printf("foobar");
exit(5);
}
Я компилирую это с
gcc -shared -fPIC -ldl -Wl,-wrap=getauxval hax.c -o hax.so
Вот так я могу запустить это
LD_PRELOAD=/tmp/hax.so myExec
И он напечатает foobar
и умрет, но если я удалю getauxval
и буду полагаться только на LD-обернутую версию __wrap_getauxval
, я вижу, что это не работает. Что мне здесь не хватает? Почему я могу повторно реализовать getauxval
и LD_PRELOAD
, но не могу их обернуть? И что мне делать, чтобы обернуть такую функцию, как getauxval
?