@228Popka228

Каким образом функции из dll получают управление?

Мне казалось что динамические библиотеки работают по принципу "отображения файла в память", то есть процесс запрашивал бы дополнительную оперативную память, в которую копируется содержимое файла dll. А сами функции в dll при этом хранились бы как обычные. Как некие адреса на которые передается управление и начинается выполнение машинного кода функции.

Сейчас узнал что передать управление можно только в неизменяемую область памяти под секцию кода, которая формируется при создании процесса. Но как понимаю динамически подключаемые библиотеки хранятся далеко не в секции кода. Каким образом тогда функции из dll-библиотек получают управление?
  • Вопрос задан
  • 42 просмотра
Решения вопроса 1
При динамической линковке код не "сваливается" в один сегмент, как это обычно происходит при статической линковке, в динамической библиотеке есть сегмент кода, у каждой библиотеки он свой. Каждая динамическая библиотека отображается в определенную область адресного пространства процесса, необязательно последовательную. Те страницы адресного пространства, куда отображается кодовый сегмент библиотеки помечаются как исполняемые. Функция получает управление в момент вызова, адрес по которому функция расположена определяется вызывающей функцией либо через таблицу импорта, которая заполняется в процессе динамической линковки, либо через непосредственный вызов GetProcAddr.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы