14

実行可能ファイルのセキュリティを処理するクラスを作成しています (シリアルのチェック、試用日のチェックなど)。実行可能ファイルをコンパイルした後 (リリース ビルドでも、すべてのデバッグと RTTI 生成をオフにして)、メモ帳で開いて生データでメソッド名を検索すると、クラスをアセンブルするメソッドの名前がす​​べて表示されます。 . コード ベースのどのクラスにも、公開されたメンバーはありません。

これは保護に悪いです。メソッド名を実行可能ファイルに保存しないように Delphi に指示する方法はありますか? RTTI が必要なく、COM 爆発もないのに、なぜそれらを保存するのですか? これを制御するコンパイラ オプションはありますか?

ターゲット実行可能ファイル内の ANY クラスの ANY メソッドが、実行可能ファイル内にテキスト形式で格納されている可能性があります。これは、Delphi 2010 のすべてのクラスで拡張 RTTI がデフォルトでオンになっていることが原因のようです。

4

4 に答える 4

15

Delphi 2010 の拡張 RTTI について質問している場合は、次の方法で無効にすることができます。

{$RTTI 明示的なメソッド([]) プロパティ([]) フィールド([])}

docwikiも参照してください。

于 2010-01-30T16:13:30.773 に答える
6

...そして、「td 32デバッグ情報」(古いバージョンの場合)をオフにするか、後のバージョンのリンカータブでデバッグ情報をオフにすることを忘れないでください。

于 2010-01-30T18:37:32.450 に答える
6

また、再配置を削除し、プロジェクトの dpr ファイルで次を取り上げます。

{$IFDEF RELEASE}
  // Leave out Relocation Table in Release version
  {$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED}
{$ENDIF RELEASE}
于 2010-01-30T18:20:19.737 に答える
-1

おそらく表示されるのは、リソースとしてのフォーム定義です(たとえば、プロジェクトのDFMファイルのバイナリ再設定)。

これらを(シリアル情報画面などで)表示したくない場合は、これらのフォームを「コードで」作成する必要があります。たとえば、TFormを作成し、TButtonとTEditをその上に配置し、コードでイベントハンドラーをアタッチします。

これを手軽に行うには、フォームから始めてDFMを作成します。フォームを表示するときは、コンテキストメニューから[テキストとして表示]を選択すると、コードにコピーする必要があるものがわかります。また、変数の参照をdepublishedの下に配置しないようにしてください(クラス定義の最初の行として常にpublic / protected /privateを配置してください)。

于 2010-01-30T16:28:41.570 に答える