Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Содержимое *.dll


Автор: metoflex 1.3.2014, 20:57
Здравствуйте Уважаемые форумчане!

Часто юзаю *.dll, но никогда не задавался вопросом, что же внутри по факту. Т.е. я всегда знал что там набор готовых функций, которые и юзал, но вот вопрос от коллеги, а что и как там внутри расположено - меня поставил в тупик. Адекватной информации в инете, с отсылкой на источник, увы найти не удалось, потому поднимаю пост здесь.

Больше всего интересно как создается сама библиотека, т.е. порядок и формат записи данных в данный файл, согласно которому компилятор парсит *.dll и находит тело нужной функции?

P.S. Интуитивно я бы сказал что внутри *.dll располагается в начале некоторое перечисление всего набора функций, с указанием имени, аргументов и возвращаемого значения, а также имеется указатель на строку в этом файле (*.dll), который указывает компилятору, что мол ты возьми и вот эти аргументы прогони по вот нижеследующему куску кода, от сих и до сих (вероятнее всего данный кусок кода записан в каком-то своем формате в файл).

Заранее весьма вам благодарен!

Автор: borisbn 2.3.2014, 10:46
Цитата(metoflex @  1.3.2014,  20:57 Найти цитируемый пост)
 Интуитивно я бы сказал что внутри *.dll располагается в начале некоторое перечисление всего набора функций, с указанием имени, аргументов и возвращаемого значения


Начал хорошо  smile
но дальше немного неправильно
Цитата(metoflex @  1.3.2014,  20:57 Найти цитируемый пост)
а также имеется указатель на строку в этом файле (*.dll), 

не на строку, а смещение, относительно начала данных в файле.

Цитата(metoflex @  1.3.2014,  20:57 Найти цитируемый пост)
 который указывает компилятору, что мол ты возьми и вот эти аргументы прогони по вот нижеследующему куску кода, от сих и до сих (вероятнее всего данный кусок кода записан в каком-то своем формате в файл).

компилятор переводит код с языка программирования в коды, которые исполняет процессор. Кстати, в .dll как раз и хранятся эти самые коды.
На этапе же выполнения твоей программы (.exe) она загружает dll-ку в память, допустим, по адресу 1000. Теперь, допустим, твоя программа хочет вызвать функцию foo, расположенную в dll-ке. Программа вычитывает из заголовка dll-ки смещение для функции foo - допустим, оно равно 146 - и делает переход (call) по адресу 1146.

Автор: bems 2.3.2014, 13:00
Цитата(metoflex @  1.3.2014,  20:57 Найти цитируемый пост)
Адекватной информации в инете, с отсылкой на источник, увы найти не удалось
плохо искал
http://msdn.microsoft.com/en-us/library/windows/hardware/gg463119.aspx

Автор: xvr 2.3.2014, 16:49
Цитата(bems @  2.3.2014,  13:00 Найти цитируемый пост)
плохо искал

Для начального ознакомления с DLL это как бы перебор  smile Лучше начать отсюда - http://msdn.microsoft.com/en-us/library/windows/desktop/ms682589%28v=vs.85%29.aspx

Автор: metoflex 2.3.2014, 17:32
Всем спасибо за помощь!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)