2

我在 Windows 上使用 MinGW gcc 构建了一个 dll。我使用 .def 来指定导出的函数并生成 .lib 导入库。然后我使用 strip.exe 去除符号表。我尝试了 objdump,它打印出空符号表。但是当我使用strings.exe时,它仍然可以打印一堆函数和类名。这是一个问题吗?其他人是否能够根据 dll 中的名称查询函数?

4

2 回答 2

3

阅读 PE,它有地址和名称表。如果您清理名称表,则没有进程能够通过名称定位导出的函数,只能通过地址,这是由链接器完成的,但不是动态的:http: //msdn.microsoft.com/en-us/magazine/cc301808。 aspx

在此处输入图像描述

有很多方法可以保护从 dll 导出的函数,但它们都已发布了漏洞利用程序。如果您真的想保护您的函数 - 在所有导出的函数中创建自定义调用约定或签名验证。

于 2013-10-05T02:29:02.110 回答
1

剥离对 dll 所做的只是删除调试符号。它不会从 dll 中删除函数。换句话说,如果有人导入或使用您的 dll,他们只能访问您导出的任何内容。如果您不希望他们能够访问它,只需不要导出它。

此外,当您进行发布构建时,如果您启用了 -s 选项,它应该删除它。

于 2013-10-05T00:25:03.267 回答