【问题标题】:Strip out symbols from dll从 dll 中去除符号
【发布时间】:2013-10-12 02:41:49
【问题描述】:

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

【问题讨论】:

    标签: c++ c gcc mingw symbols


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-15
        • 2011-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-01
        • 1970-01-01
        • 2010-11-13
        相关资源
        最近更新 更多