dll's когда-либо превращается в машинный код?

Просто любопытный, мне сказали, что с dll файлами, можно сделать модификации к dll, не перекомпилировав целое приложение, которое использует его. С другой стороны, файлы .lib должны быть скомпилированы так, код может связанный с приложением как один.

Таким образом, я знаю, что .lib файлы превращены в машинный код. но что относительно dll's?? В них превращаются машинный код после выполнения приложения??

Это могло, вероятно, привести к легкому взламыванию если не используемое право.

8
задан deft_code 4 June 2010 в 00:05
поделиться

5 ответов

DLL-файлы по-прежнему являются машинным кодом. Они просто динамически связаны во время выполнения (отсюда и название), поэтому (если вы не меняете сигнатуры функций) вам не нужно перекомпилировать свою основную программу для использования dll после ее изменения. Статическая библиотека физически является частью вашего исполняемого файла, поэтому изменения в ней требуют перекомпиляции (или действительно повторной ссылки).

11
ответ дан 5 December 2019 в 07:10
поделиться

Проще говоря: библиотеки DLL могут быть заменены после компиляции, потому что они физически отделены от вашего exe. Файлы lib и obj, с другой стороны, скомпилированы в ваш exe, так что их обновление требует перекомпиляции вашего приложения.

По сути, DLL - это exes, которые не определяют main ().

1
ответ дан 5 December 2019 в 07:10
поделиться

DLL действительно содержат скомпилированный машинный код. Разница в том, что связывание EXE-файла приложения и DLL выполняется во время выполнения , а не во время (традиционного) связывания между файлами OBJ и LIB.

7
ответ дан 5 December 2019 в 07:10
поделиться

Когда DLL связана с основной программой, только интерфейс, т.е. классы, функции и т.д., которые она экспортирует, связаны их подписью. Фактический машинный код внутри библиотеки DLL загружается только во время выполнения, а не во время компиляции; Вот почему вы можете создать свое приложение только с помощью библиотеки DLL и поместить фактическую библиотеку DLL туда, где вы бы предпочли ее иметь (например, какую-то общую папку DLL или что-то еще).

Затем можно заменить эту библиотеку DLL любой другой библиотекой DLL с тем же интерфейсом. Так обычно работают плагин-системы,поскольку каждый плагин является просто DLL, который соответствует документированному предопределенному интерфейсу, и программа просто загружает все библиотеки DLL этого интерфейса, которые она находит в некоторых каталогах «плагинов».

(возможно) запутанная часть здесь заключается в том, что фактически существует два типа файлов .lib:

a) libs для статического связывания. Они помещают весь свой скомпилированный код непосредственно в основное приложение и являются фиксированной частью результирующего .exe файла.

b) libs для динамического связывания. Они содержат интерфейс для библиотеки DLL, содержащий фактический код, который должен быть доступен приложению только во время выполнения (а если это не так, он не запустится, и просто сообщит вам, какую библиотеку DLL он не смог найти).

Btw: вам не нужно указывать, на какую из библиотек вы ссылаетесь, какой тип, он делает это автоматически.

Кроме того: Некоторые приложения создаются как библиотеки DLL, предназначенные для запуска в некоторой внешней среде. Веб-сервисы, например, реализуются в виде библиотек DLL с определенным интерфейсом,которые запускаются сервером Apache/IISAPI/whatever. Это работает аналогично вышеупомянутой плагин-системе, но здесь каждая DLL фактически является приложением.

0
ответ дан 5 December 2019 в 07:10
поделиться

DLL обычно содержит машинный код. Дело не в том, что вы можете изменить DLL, потому что это исходный код, а в том, что вы можете изменить исходный код для DLL, перекомпилировать и повторно связать, и пока интерфейс остается то же самое, вы можете заменить старую DLL на новую, а остальная часть приложения может использовать новую вместо старой.

На самом деле это часто приводит к проблемам, например к приложению, содержащему код, который зависит от ошибки в старой DLL. Когда / если вы создаете версию, которая исправляет ошибку, это приводит к поломке приложения. Google для "DLL Hell" для многих других примеров.

4
ответ дан 5 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: