LINUX.ORG.RU

_GLOBAL_OFFSET_TABLE_


0

0
необходимо получить адрес сабжа в функции инициализации динамической библиотеки

код

extern unsigned long _GLOBAL_OFFSET_TABLE_[];
void init(void) {
    void * ptr = _GLOBAL_OFFSET_TABLE_;
}

не работает, потому как компилятор генерирует релокацию GOTPCREL для сабжа, т. е ищет адрес GOT в самой GOT
★
Ответ на: комментарий от anonymous
через LD_PRELOAD загружается библиотека, в функции инициализации которой сабжевый код
необходимо определить адрес _DYNAMIC секции исполняемого файла к которому применяется LD_PRELOAD 
из GOT библиотеки можно найти адрес структуры link_map, которая описывает эту библиотеку
через нее найти link_map для исполняемого файла
в структуре через l_ld получить адрес _DYNAMIC

вся эта шняга нужна для замены вызовов библиотечных функций из исполняемого файла на вызовы функций из библиотеки (путем изменения элементов GOT PLT исполняемого файла)
rei3er ★
() автор топика
Ответ на: комментарий от rei3er
>вся эта шняга нужна для замены вызовов библиотечных функций из исполняемого файла на вызовы функций из библиотеки

Для этого и нужен LD_PRELOAD, не надо велосипедов. Если нужно просто "заменить вызов библиотечных функций из исполняемого файла на вызовы функций из библиотеки", то просто грузите это библиотеку в LD_PRELOAD, предварительно переопределив в ней функции

anonymous
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.