Ответ 1
Если вы спрашиваете о расширенном RTTI в Delphi 2010, его можно отключить на
{$ RTTI EXPLICIT METHODS ([]) СВОЙСТВА ([]) ПОЛЯ ([])}
см. также docwiki.
Я пишу класс для обработки безопасности в своем исполняемом файле (проверка серийных номеров, проверка даты проверки и т.д.). После компиляции исполняемого файла (даже в сборке Release, при отключении отладки и генерации RTTI), когда я открываю его в NotePad и просматриваю имя метода в необработанных данных, я могу видеть все имена методов, которые собирают мой класс, В базе данных нет опубликованных элементов в любом классе.
Это плохо для защиты. Есть ли способ сказать Delphi не хранить имена методов в исполняемом файле? Почему они хранят их вообще, если нет необходимости в RTTI и нет COM-взрыва? Есть ли опция компилятора, контролирующая это?
Может быть, что ЛЮБОЙ метод ЛЮБОГО класса в исполняемом файле цели хранится внутри исполняемого файла в текстовой форме. По-видимому, это связано с тем, что расширенный RTTI включен по умолчанию для всех классов в Delphi 2010.
Если вы спрашиваете о расширенном RTTI в Delphi 2010, его можно отключить на
{$ RTTI EXPLICIT METHODS ([]) СВОЙСТВА ([]) ПОЛЯ ([])}
см. также docwiki.
Также переместите ретрансляции, возьмите в файле проекта dpr следующее:
{$IFDEF RELEASE}
// Leave out Relocation Table in Release version
{$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED}
{$ENDIF RELEASE}
... и не забудьте отключить "td 32 debug info" (в старых версиях) или отладочную информацию на вкладке компоновщика в более поздних версиях.
То, что вы, вероятно, увидите, - это определение вашей формы в качестве ресурса (например, двоичная репрезентация файлов DFM вашего проекта).
Если вы не хотите показывать их (для экранной информации и т.д.), вы должны создавать эти формы "в коде". Например, создайте TForm, поместите на него TButton и TEdit, присоедините обработчики событий в коде.
Чтобы сделать это ручным способом: начните с формы и создайте DFM. При изменении формы выберите "Просмотр" в виде текста из контекстного меню, и вы узнаете, что нужно скопировать в код. И убедитесь, что НЕ размещать какие-либо varaiablerefernces в опубликованном (всегда ставьте public/protected/private как первую строку в определении вашего класса.