如何阻止DLL中的函数导出?

How can I block a function in a DLL from exporting?

本文关键字:函数 何阻止 DLL      更新时间:2023-10-16

我想从DLL中导出一个函数:

extern "C" int __stdcall DoSomething(int &inputSize, int &outputSize);

它输出很好,有一个好名字。但是,这个DLL中的所有其他函数也可以导出—除了具有难看的名称。

我可以阻止它们导出吗?

我使用这个工具来查看导出的内容:http://www.nirsoft.net/utils/dll_export_viewer.html

使用定义文件。这是创建它的确切用例。

;     @Author : Brandon.
;
;     @param  : MyDLL Definition File.
;     @param  : Another Description.

LIBRARY MyDLL
DESCRIPTION "MyDLL Definition File"
EXPORTS
DoSomething;

另存为MyDLL.def

现在它将导出名为"DoSomething"的函数。

要与Mingw/Codeblocks一起使用,你必须添加:

-Wl,--enable-stdcall-fixup-Wl,--kill-at -d --input-def src/MyDLL.def

指向链接器标志。

您感兴趣的是符号的可见性。在gcc和clang中,默认情况下导出所有符号。您可以使用-fvisibility=hidden作为命令开关。

gcc还有一些属性可以用来设置特定符号的可见性:

#define DLL_PUBLIC __attribute__ ((visibility ("default")))
#define DLL_LOCAL  __attribute__ ((visibility ("hidden")))