2009-10-18 2 views
1

Если я поместил все свои элементы управления в EXE, он доступен извне, как если бы он был доступен, когда он помещается в DLL?Является ли EXE заблокированным (vs DLL)?

+0

Это действительно зависит от того, говоришь ли вы о CLR и неуправляемом коде, и о том, какие элементы управления вы разрабатываете - собственные Win32, ActiveX, Winforms или WPF. –

+0

Я говорю об .NET управляемых EXE. – Shimmy

ответ

0

Как упоминалось BobbyShaftoe, это зависит от того, используете ли вы управляемый или неуправляемый код, но я буду здесь считать, что вы используете неуправляемые C или C++.

В общем случае скомпилированный исполняемый файл (EXE или DLL, в случае Windows) состоит из множества функций и глобальных переменных, и каждый из них имеет определенное место в логическом адресном пространстве исполняемого файла (которое отображается в физической памяти адреса при загрузке исполняемого файла).

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

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

+0

Ваш третий абзац не имеет для меня никакого смысла. DLL и «исполняемый файл» являются PE-файлами в современных Windows с возможностью экспорта символов или нет. В любом случае вам все равно нужно явно экспортировать символы, если вы хотите, чтобы они были «видимыми» для другого пользователя вашего PE-файла. Или, экспортированный или нет, вы можете самостоятельно разрешить символ (вместо использования «GetProcAddress» при экспорте) и выполнить код. Я думаю, вы делаете различие между DLL и «исполняемыми файлами», которых просто нет. – mrduclaw

+0

Хорошая точка. Мне кажется, что * цель * EXE (в отличие от DLL) больше соответствует тому, что хочет OP, если он хочет сделать символы недоступными. Если вы можете привести некоторые примеры причин экспорта символов в развернутом EXE, это, похоже, лучше ответит на вопрос OP. (Я бы попробовал сам, но я не программист на Windows, и поэтому, возможно, пропустил бы тонкости того, как MS решила это сделать ;-) – David

+0

Я говорил об управляемом коде .NET, жаль, что не упоминал об этом во-первых. – Shimmy

0

Итак, это то, что вам нужно, это правило экспорта символов, если только вы ничего не делаете, символы не экспортируются при компиляции exe в Windows. Теперь, если вы говорите об .NET, то проблема немного другая. Однако я заметил, что вы отметили это с помощью безопасности; Я бы не стал полагаться на этот факт в целях безопасности. Ввод кода и так далее атаки немного сложнее, чем это.

Смежные вопросы