导出没有 def 文件的序号

Export ordinal without def file

我们可以使用 def file.But 导出序号,系统 dll 不使用 def files.Still shell32.dll 有 569 个序号导出,user32.dll 有 181 个序号导出。

没有 def 文件,有什么方法可以导出序号吗?

每个 导出的函数都有一个序号。 linker 自动给它们编号,它从 1 开始。但是如果你想控制 exact 值(就像 Microsoft 必须处理这些 DLL)那么你 必须使用.def文件。

仅当客户端代码之前使用序号时才需要,您需要与不重建的旧代码的二进制兼容性, 您添加或删除了导出函数。为了达到 99.99% 的准确度,客户端代码从不使用序号来 link 导出的函数。他们总是改用这个名字。如果您在 .def 文件中导出具有 NONAME 属性的函数,则您只会依赖于序号值,从而强制客户端代码改用序号。实际上,只有在您想隐藏导出时才会这样做。

Microsoft 永远无法对此做出任何假设,并且在过去 23 年中被迫保持这些 DLL 的二进制兼容性。不是我们的负担。