Як я розумію, стандартна бібліотека С(libc.so) та інші подільні(shared) бібліотеки
- це об'єктні файли формату ELF.
Тобто це вже скомпільована програма(двійкова).
А чи можу я якимось чином переглянути її вихідний код до компіляції?
PS: питання першого посту залишаються відкритими...
Вони не діляться, вони "спільні" бібліотеки.
Треба тільки джерельні тексти стягнути. Що у вас за дистрибутив? Я вам тикну пальцем у конкретний пакет.
А вот другой популярный прием, называемый методом "подмены библиотеки", также позаимствованный из мира Windows: * создаем "обертку" (wrapper) вокруг интересующей нас библиотеки, экспортирующей те же самые функции, что и она; * оригинальную библиотеку переименовываем или размещаем в другом месте; * функции-обертки определяют идентификатор вызывающего их процесса, и, если это действительно "их" процесс, совершают заранее запланированные действия (пишут вызов в log, подменяют аргументы или код возврата и т.д). Как определить id процесса? Это легко, ведь функции-обертки вызываются из контекста процесса, который их использует, и решение задачи сводится к выяснению идентификатора текущего процесса, возвращаемого функцией getpid(); * функция-обертка передает управление оригинальной функции основной библиотеки или своей собственной подложной функции;За внешней простотой реализации такого подхода кроется целый ворох проблем. Создать обертки вокруг всех "системных" библиотек вручную практически нереально, и эту работу необходимо автоматизировать, написав несложный парсер so-файлов и кодогенератор. Необязательно генерировать готовый ELF-файл, проще создать Си-программу и откомпилировать ее с помощью gcc."Глобальность" перехвата воздействует на все процессы, и кривая "обертка" рушит ось так, что только дампы летят. Давай не будем трогать системные библиотеки, а вместо этого изменим переменную LD_LIBRARY_PATH в окружении "подопытного" процесса. Она специально предусмотрена на тот случай, если отдельно взятому приложению требуется предоставить свой набор библиотек (статический и динамический загрузчики сначала ищут библиотеку в путях, указанных LD_LIBRARY_PATH, и только если там ее не оказывается, переходят к файлу /etc/ld.so.conf, а затем к путям /lib и /usr/lib), но, если "подопытный" процесс попытается загрузить библиотеку по абсолютному пути, он сможет вырваться из-под нашего контроля!