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 的无导出符号版本。我猜这个相当简单的任务需要做很多工作。

在使用一堆脚本和东西覆盖所有这些之前,我想也许,也许有一个更简单的解决方案

请注意,我正在使用 VisualStudio (2012),因此pragma hidden据我所知,漂亮的 GCC 不会这样做。

4

0 回答 0