в x86-64 есть две функции обработчика прерываний первый способ, позволяет получить адрес обработчика, который сделан для совместимости с х32, второй сопособ позволяет получить адрес для х64 обработчика.
Для перехвата функций внутри любого юзерспейсовского процесса вполне достаточно хорошего знания ELF.
В конце концов, так работает сам загрузчик (ld.so). LD_PRELOAD тут не панацея, ибо перехватывает ВСЕ обращения из всех модулей процесса к некоторой функции.
Другой вопрос — когда дело касается хуков сторонней программы.
мдауж. 9 лет все наступали на грабли под windows, а теперь и под никсами стали на них наступать.
Уже везде 100 раз было сказано, что сброс WP бита — это опасное действие, которое может натварить очень много плохих дел. И если надо писать в защищенные участки памяти под ядром, то лучше использовать другой механизм: По виртуальному адресу страницы получить физические страницы. Для полученных физических страниц выделить виртуальную память без защиты. т.е. на одну и туже физическую страницу памяти будет ссылаться 2 страницы виртуальной памяти, но одна из них будет не защищена.
Перехват системных вызовов в linux под x86-64