1

難読化のために、DLL からエクスポートされたシンボルを非表示にしたいと考えています。

.defこれは、次のようなモジュール定義ファイル ( ) を使用すると、かなりうまく実行できます。

EXPORTS  
??0Foo@QAE@XZ   @1   NONAME
??1Foo@QAE@XZ   @2   NONAME
?Bar@Foo@UAEHXZ @3   NONAME

問題は、このようなソリューションは非常に柔軟性がなく、手作業が必要なことです。私の例でわかるように、C++ シンボルをエクスポートしているため、コンパイラによって大幅に装飾されています。

したがって、私の現在のワークフローは次のようになります。

最初に、 を使用してすべてのシンボルを標準的な方法でエクスポートするバージョンの DLL を作成する__declspec(dllexport)必要がありdumpbinます。それが完了したら、シンボルをコピーしてモジュール定義ファイルに貼り付け、そのNONAMEディレクティブを追加する必要があります。次に、元のソースがそれを使用していないことを確認する必要があり__declspec(dllexport)ます。すべてが完了したら、プロジェクト設定内でその .def ファイルを有効にする必要があります。その後、最終的にその DLL のエクスポート シンボル フリー バージョンをビルドできます。そのかなり単純なタスクには多くの作業が必要だと思います。

一連のスクリプトなどを使用してこれらすべてをカバーする前に、もっと簡単な解決策があるのではないかと思いました。

pragma hidden私はVisualStudio(2012)を使用しているため、私の知る限り、気の利いたGCCは機能しないことに注意してください。

4

0 に答える 0