難読化のために、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は機能しないことに注意してください。