我在Windows上使用MinGW gcc构建了一个dll。我使用.def来指定导出的函数并生成.lib import lib。然后我使用strip.exe去除符号表。我尝试了objdump并打印出空符号表。但是当我使用strings.exe时,它仍然可以打印一堆函数和类名。这是一个问题吗?其他人是否能够根据dll中的名称查询函数?
答案 0 :(得分:3)
了解PE,它有地址和名称表。如果清理名称表,则任何进程都不能按名称查找导出的函数,只能按地址来查找,这是由链接器完成的,但不是动态的: http://msdn.microsoft.com/en-us/magazine/cc301808.aspx
有许多方法可以保护dll中的导出函数,但所有这些方法都已发布漏洞。如果您确实想要保护您的功能 - 在所有导出的功能上创建自定义调用约定或签名验证。
答案 1 :(得分:1)
对dll进行的所有剥离都是删除调试符号。它不会从dll中删除函数。换句话说,如果有人导入您的dll或使用它,他们只能访问您导出的任何内容。如果您不希望他们能够访问它,只需不要导出它。
此外,当您执行发布版本时,如果启用了-s选项,则应将其删除。