Если я поместил все свои элементы управления в EXE, он доступен извне, как если бы он был доступен, когда он помещается в DLL?Является ли EXE заблокированным (vs DLL)?
ответ
Как упоминалось BobbyShaftoe, это зависит от того, используете ли вы управляемый или неуправляемый код, но я буду здесь считать, что вы используете неуправляемые C или C++.
В общем случае скомпилированный исполняемый файл (EXE или DLL, в случае Windows) состоит из множества функций и глобальных переменных, и каждый из них имеет определенное место в логическом адресном пространстве исполняемого файла (которое отображается в физической памяти адреса при загрузке исполняемого файла).
Если кто-то знает адрес конкретной функции или переменной в своем исполняемом файле, вы не можете сделать это, чтобы остановить их использование —, но в DLL эта информация действительно доступна, поэтому люди могут реально искать ваши функции (ну, те, которые вы выбрали для экспорта) по имени.
Обычно вы должны предоставить файл заголовка с вашей DLL, который обрабатывал бы этот поиск имен, поэтому им просто нужно вызвать функции, как если бы они были частью их собственной программы.
Ваш третий абзац не имеет для меня никакого смысла. DLL и «исполняемый файл» являются PE-файлами в современных Windows с возможностью экспорта символов или нет. В любом случае вам все равно нужно явно экспортировать символы, если вы хотите, чтобы они были «видимыми» для другого пользователя вашего PE-файла. Или, экспортированный или нет, вы можете самостоятельно разрешить символ (вместо использования «GetProcAddress» при экспорте) и выполнить код. Я думаю, вы делаете различие между DLL и «исполняемыми файлами», которых просто нет. – mrduclaw
Хорошая точка. Мне кажется, что * цель * EXE (в отличие от DLL) больше соответствует тому, что хочет OP, если он хочет сделать символы недоступными. Если вы можете привести некоторые примеры причин экспорта символов в развернутом EXE, это, похоже, лучше ответит на вопрос OP. (Я бы попробовал сам, но я не программист на Windows, и поэтому, возможно, пропустил бы тонкости того, как MS решила это сделать ;-) – David
Я говорил об управляемом коде .NET, жаль, что не упоминал об этом во-первых. – Shimmy
Итак, это то, что вам нужно, это правило экспорта символов, если только вы ничего не делаете, символы не экспортируются при компиляции exe в Windows. Теперь, если вы говорите об .NET, то проблема немного другая. Однако я заметил, что вы отметили это с помощью безопасности; Я бы не стал полагаться на этот факт в целях безопасности. Ввод кода и так далее атаки немного сложнее, чем это.
- 1. Является ли HTTP-сообщение заблокированным Cloud9?
- 2. .exe vs .dll как модули одной программы
- 3. Как определить, является ли файл EXE или DLL?
- 4. Как проверить, является ли PE-файл (DLL, EXE) COM-компонентом?
- 5. Является ли EXE только DLL с основным методом?
- 6. Встраивается * .exe в dll
- 7. Могу ли я хранить артефакт DLL/EXE, созданный VS VS ++ проектами в пакетах NuGet?
- 8. Вызов VS 2013 dll из VS 2008 dll
- 9. Вставить DLL в Exe
- 10. Как определить, является ли dll COM-dll
- 11. EXE и DLL зависимости - Когда перекомпилировать EXE?
- 12. Является ли поток заблокированным при работе с базой данных?
- 13. Время загрузки DLL в Visual Studio vs EXE-файл
- 14. Положив EXE и DLL вместе в VS 2013
- 15. DLL TO EXE Conversion? [C++]
- 16. DLL остается заблокированным после того, как процесс был убит
- 17. .Net DLL vs C++ DLL
- 18. Почему DLL, связанный с EXE
- 19. Отображение окна WPF, когда проект является dll, а не exe
- 20. VS Build DLL Reference Question
- 21. Запуск DLL в качестве exe
- 22. DLL EXE Hybrid C++ Windows
- 23. Отладка DLL с выпуском EXE
- 24. Анализатор и декомпилятор Exe & Dll
- 25. Распространение DLL внутри EXE (C++)
- 26. Развертывание .exe и зависимого .dll
- 27. Файл TFS должен оставаться заблокированным
- 28. WPF. Встраивать DLL в EXE
- 29. Как определить, является ли EXE WPF
- 30. Является ли имя процесса всегда именем exe?
Это действительно зависит от того, говоришь ли вы о CLR и неуправляемом коде, и о том, какие элементы управления вы разрабатываете - собственные Win32, ActiveX, Winforms или WPF. –
Я говорю об .NET управляемых EXE. – Shimmy