Как загружаемые модули ядра во время выполнения узнают адреса основных функций ядра? - PullRequest
1 голос
/ 01 июня 2011

Мне будут интересны ответы как для Linux, так и для NT (или любого другого в этом отношении)

Edit:

Спасибо Лориону за ответ.

Больше информации здесь:

Ответы [ 2 ]

3 голосов
/ 01 июня 2011

Загрузчик времени выполнения обычно исправляет ссылки на импортированные функции при загрузке модуля.Он смотрит на таблицу импортируемых функций и помещает в соответствующий адрес.Модуль использует импортированные функции через таблицу косвенности.

0 голосов
/ 08 сентября 2014

Написав загрузчик для ядра Windows (и пространства пользователей Windows) раньше: он работает одинаково. по сути, все двоичные файлы имеют то, что называется IAT (например, http://msdn.microsoft.com/en-us/magazine/cc301808.aspx это вечная классическая статья). Когда загрузчик выделил память для DLL, он скопирует туда DLL и прочитает IAT DLL для всех символов, которые ему нужны (по имени), а затем ищет имена в разделе экспорта основной DLL Windows (например, , kernel32.dll), и заполните его прочитанным адресом. все необходимые файлы должны быть прочитаны и заполнены адресом, прежде чем DLL сможет продолжить выполнение.

Linux тоже работает одинаково ..... будь то пользовательское пространство или ядро. Структура ELF называет это таблицей перемещения.

http://www.bravegnu.org/gnu-eprog/linker.html

Надеюсь, что поможет :-) (детали похожи на x86 arch).

...