Ошибка поиска символа крючка для обеспечения возврата во время выполнения - PullRequest
0 голосов
/ 19 октября 2019

Загрузчик выполняет динамический поиск символа непосредственно перед использованием символа и сообщит об «ошибке поиска символа», если символ не найден. Я хотел бы как-то зарегистрировать ловушку, чтобы, если она не нашла символ, я мог предоставить запасной вариант. В идеале что-то вроде:

uintptr_t symbol_lookup_fallback(const char *symbol);

, которое во время выполнения будет анализировать сбойную символьную строку и возвращать (уже ASLR) адрес к резервной опции. Это похоже на опцию слабых символов в GCC, за исключением того, что я не знаю заранее, какие символы помечать как слабые, поэтому мне нужно выполнить анализ во время выполнения.


В качестве альтернативы, я мог бы также работатьс первой возможностью предоставить символ, прежде чем загрузчик попробует его. Я предполагаю, что это может быть более осуществимо, если использовать LD_PRELOAD для переопределения моей собственной версии dlsym или любой другой используемой, и вызывать реальную реализацию, только если у меня нет пользовательской реализации. Однако, если я переопределю dlsym, я не смог бы получить следующий символ с dlsym(RTLD_NEXT, "dlsym"), поскольку это была бы просто рекурсия.

...