windows - 在 DLL 中,函数表的结构是怎样的?

标签 windows dll assembly

我一直在研究不明确支持我的操作系统的设备库的实现。特别是,我有一个反汇编的 DLL,以及相当多的支持源代码。那么,函数表/导出表的结构是怎样的呢?

我的理解是 .data 部分的第一个结构是 RVA 表。接下来是通过索引链接到第一个地址表的字符串表。这对我来说很有意义,因为链接器可以在符号和地址之间进行转换。

序数引用的函数如何适应这张图?如何知道哪个函数有这样那样的序号,链接器如何解决这个问题?换句话说,假设其他一些 DLL 导入了 SOME_LIBRARY_ordinal_7,链接器如何知道要使用哪个函数?

谢谢大家!

编辑 更多信息...

我正在使用 FTDI 库,并且想解决正在调用的函数。特别是,我看到类似这样的内容:

extern FTD2XX_Ordinal_28: near

我如何确定正在引用哪个函数,以及链接器如何执行此操作?

最佳答案

要了解链接器和加载器如何在 Windows 上工作,最容易获得的信息可能来自 Matt Pietrek 十多年前写的一组专栏:

最大最好的一个:

关于windows - 在 DLL 中,函数表的结构是怎样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2307754/

相关文章:

windows - 为什么 Windows Shell 上下文菜单处理程序会破坏 Windows 8/10 上的高级用户菜单 (Win+x)?

c++ - 用静态库替换dll

c# - 在多个平台上使用.NET DLL

c++ - 使用 .dll 的方法

c++ - 升级后内循环性能下降是什么原因?

c++ - 地址减法值总是12?变量的大小是否很小?

.net - Windows 中没有 makecert 的自签名证书?

android - 无法启动 './qemu/windows-x86_64/qemu-system-i386.exe' : No such file or directory

windows - 同一系统上的 64 位和 32 位非托管 dll - 最佳实践?

assembly - 如何检查 x86 程序集中的 key 状态?