在 DLL 中,函数表的结构如何?

2024-04-23

我一直在研究不明确支持我的操作系统的设备库的实现。特别是,我有一个反汇编的 DLL,以及大量的支持源代码。现在,功能表/导出表是如何构造的?

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

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

谢谢大家!

edit更多信息...

我正在使用 FTDI 库,并且想确定正在调用哪个函数。特别是,我看到类似的东西:

extern FTD2XX_Ordinal_28: near

我该如何确定正在引用哪个函数,以及链接器如何做到这一点?


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

  • 1997 年 7 月:http://www.microsoft.com/msj/0797/hood0797.aspx http://www.microsoft.com/msj/0797/hood0797.aspx
  • 1998 年 4 月:http://www.microsoft.com/msj/0498/hood0498.aspx http://www.microsoft.com/msj/0498/hood0498.aspx
  • 1999 年 9 月:http://www.microsoft.com/msj/0999/hood/hood0999.aspx http://www.microsoft.com/msj/0999/hood/hood0999.aspx

最大和最好的一个:

  • 窥探 PE 内部:Win32 可移植可执行文件格式之旅 http://msdn.microsoft.com/en-us/library/ms809762.aspx(从 1994 年开始!)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 DLL 中,函数表的结构如何? 的相关文章

  • 在 Windows 上使用 Python 打开设备句柄

    我正在尝试使用 Giveio sys 驱动程序 该驱动程序需要先打开一个 文件 然后才能访问受保护的内存 我正在查看 WinAVR AVRdude 中的 C 示例 它使用以下语法 define DRIVERNAME giveio HANDL
  • shell进程的并行执行

    有没有一个工具可以在 Windows 批处理文件中并行执行多个进程 我发现了一些有趣的 Linux 工具 parallel http mi eng cam ac uk er258 code parallel html and PPSS ht
  • CTRL+C 和 CTRL+Break 不同吗?

    我一直认为它们绝对是一样的 但我刚刚在以下位置找到了一些值 CTRL C EVENT 和 CTRL BREAK EVENT设置控制台Ctrl处理程序 http msdn microsoft com en us library ms68601
  • Cygwin setup.exe 在安装 Windows 8 期间挂起?我该怎么继续?

    因此 过去几年我断断续续地使用过 Cygwin 并且安装过几次 但是 我从未在安装过程中经历过安装挂起的情况 发生这种情况时 安装实际上会冻结并且不会 一点 移动 我读到这是一个有点常见问题 http cygwin com ml cygwi
  • Unity3D 不安全代码需要指定“unsafe”命令行选项

    我在用Unity3D 4 3并打电话给DLL我创造的 当尝试调用它唯一的函数时 这是 void GetModelReferences int nVertices float vertices int nTriangles int trian
  • 遍历内存编辑每个字节

    我正在编写汇编代码 提示用户输入一串小写字符 然后输出包含所有大写字符的相同字符串 我的想法是迭代从特定地址开始的字节 并从每个字节中减去 20H 将小写变为大写 直到到达具有特定值的字节 我对 Assembly 相当缺乏经验 所以我不确定
  • C++ 中的 CPUID 实现

    我想知道这里是否有人有一些可以从任何托管 net 语言引用的 C CPUID 实现的好示例 另外 如果情况并非如此 我是否应该注意 X86 和 X64 之间的某些实现差异 我想使用 CPUID 来获取运行我的软件的机器上的信息 崩溃报告等
  • 轻量级 Windows 应用程序的最佳开源示例是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 这段汇编语言代码是什么意思?

    我是一名学生 刚刚开始学习汇编语言 为了更好地理解它 我只是用 C 写了一个简短的代码并将其转换为汇编语言 奇怪的是我有点听不懂 代码是 include
  • 无法加载 php_curl

    我已经在WindowsXp上安装了php5 2 13 apache2 2 15 将C php添加到PATH ssystem变量中 我无法启用卷曲扩展 我配置了extension dir并删除了 在 php ini 中形成 php curl
  • 使用 Composer 安装 PHPUNIT

    我有一个关于 Symfony 2 的项目 我想在 Windows 7 上使用 PHPUNIT On githut phpunit is Composer Simply add a dependency on phpunit phpunit
  • 即使我确实为变量设置了初始值,数据段也没有被初始化

    我已经编写了一个代码 该代码应该生成某种数字列表 但是即使我为它们分配了初始值 我的数据段变量也没有被初始化 This is how DS 0000 looks when I run it 这是我的代码 但数据段只保留垃圾值 MODEL s
  • 无法以管理员身份更改 Windows 10 中的系统变量路径

    我正在 Windows 10 计算机中安装 Java JDK 需要通过在 Windows 设置中编辑系统变量来注册其路径 但我以管理员和普通用户身份尝试过 但它不允许我添加路径 甚至复制粘贴或仅添加任何角色 在 Win 8 中执行此操作没有
  • 向 Windows 任务栏缩略图添加按钮 JavaFX?

    这个问题已经闲置一年多了 我的问题仍然没有解决方案 我编辑此内容是为了澄清我的问题并引起人们对它的新关注 如果您使用 Windows 您可能知道将程序图标悬停在任务栏上时显示的小预览图像 缩略图 某些程序 例如 Spotify Git 扩展
  • Python 原始字符串和尾随反斜杠[重复]

    这个问题在这里已经有答案了 我曾经遇到过一些东西 想知道它是否是一个 Python bug 或者至少是一个错误功能 我很好奇是否有人知道这种行为的任何理由 我刚刚在阅读 Code Like a Pythonista 时想到了这一点 到目前为
  • C# 同步进程启动

    我正在尝试从一段代码启动一个进程 但我希望代码暂停执行 直到进程完成并退出 目前 我正在使用 System Diagnostics Process Start 类来启动 特别是 卸载程序 并且之后执行的代码确实依赖于安装程序卸载程序在恢复执
  • IIS 或任何文件夹服务器 2012 R2 中不存在 adfs 目录的虚拟或物理位置

    我有一个完全可操作的联合身份验证服务器 Azure 同步 Office 365 同步和本地 配置的每个部分都完美运行 我遇到的问题是 没有任何 Web 目录文件的痕迹 我查看了每个位置 并且我的联合代理或联合服务器上不存在虚拟目录 我正在尝
  • Visual Studio 2017 上的简单装配程序

    386 model flat c stack 100h printf PROTO arg1 Ptr Byte data msg1 byte Hello World 0Ah 0 code main proc INVOKE printf ADD
  • 如何在我的项目中使用 FFTW DLL 导入库 .lib 作为静态 .lib?

    我了解 C 和编译小型插件 始终基于类似且布局的工作流程 虽然目前我需要将最新版本的 FFTW 编译成静态库 或者从编译版本中获取它 这应该会容易得多 但这给了我一个非常困难的时间 可能是因为我不知道编译的来龙去脉 请注意 我正在使用 Vi
  • 减法进位标志

    我正在使用 MASM32 有了这个代码 mov eax 5 sub eax 10 CF 状态标志将被设置 但使用我的铅笔和纸 我实际上看到 MSB 没有任何进位 是的 我知道从较少的数字中减去大的数字集CF 但我想知道为什么 因为使用这段代

随机推荐

  • 如何在Linux中使用相对路径打开文件?

    我有一个程序 它使用相对路径 例如 打开文件 现在的问题是 当我从另一个目录执行程序时 相对路径不是相对于程序而是相对于工作目录 因此 如果我使用 path to program myprog 启动程序 它将无法找到该文件 有没有办法独立于
  • 你能检测到 UIViewController 何时被解除或弹出吗?

    每当我的视图控制器之一被解除 弹出 卸载时 我都需要在共享资源中执行一些清理 这可能是当用户点击该单个屏幕上的后退按钮时 或者调用 popToRootViewController 时 在这种情况下 理想情况下我能够清除弹出的每个控制器 显而
  • 创建子列表[重复]

    这个问题在这里已经有答案了 与列表扁平化相反 给定一个列表和长度 n 返回长度为 n 的子列表的列表 def sublist lst n sub result for i in lst sub i if len sub n result s
  • 禁用 RVM 还是使用未安装 RVM 的 Ruby?

    对于 Rails 应用程序 我安装了 Ruby 1 8 7 和 Rails 2 3 11 而且运行良好 之后我安装了 RVM 和 REE 因此 在运行 ruby 脚本 服务器时 它使用 REE 但现在我想使用较旧的 Ruby 1 8 7 它
  • 如何在intelliJ IDEA中分离spring上下文

    我在配置 IntelliJ IDEA 来开发 spring 和 Maven 支持的应用程序时遇到问题 应用程序有两个独立的弹簧配置 用于生产和测试目的 在 IDEA 的 Spring Facet props 中 我创建了两个不同的文件集 但
  • REngine 不调用 R Console

    从其中一个站点收集的代码 它不会从 REngine 调用 R Console 创建REngine后就断掉了 没有去try catch 问题 Rengine re new Rengine args true new TextConsole2
  • 助手在 Rails 3(.2) 中使用大量内存

    在将 Rails 2 应用程序迁移到 Rails 3 时 我遇到了内存使用量的巨大增加 经过一番研究 我发现帮助者是问题所在 取消注释视图中的任何助手会加快一切速度 我试图找到真正问题的事情 include all helpers fals
  • CSS:四个 div,第三个必须占据其余空间

    我在互联网上尝试了几种资源 也如此 但我根本无法解决这个问题 网页上只有四个浮动 div div 1 2 和 4 具有固定宽度 div 3 必须占据剩余的宽度 div 2 和 3 之间必须有填充 所有 div 必须具有 padding 0
  • 这是 GCC 中的错误还是我的代码错误?

    我有这个C代码 int test signed char anim col if anim col gt 31 return 1 else if anim col lt 15 return 2 return 0 使用 Android NDK
  • SQL Server 中的并发执行

    表架构 SQL Server 2012 Create Table InterestBuffer AccountNo CHAR 17 PRIMARY KEY CalculatedInterest MONEY ProvisionedIntere
  • 从文件中读取 GLSL 着色器

    我正在尝试从如下所示的文件中读取顶点和片段着色器 version 330 core in vec3 ourColor out vec4 color void main color vec4 ourColor 1 0f but when i
  • 如何将 ASCII 字符的十六进制值写入文本文件?

    这是我目前所拥有的 void WriteHexToFile std ofstream stream void ptr int buflen char prefix unsigned char buf unsigned char ptr fo
  • 执行错误日志记录的简单方法?

    我创建了一个小型 C winforms 应用程序 作为一项附加功能 我正在考虑向其中添加某种形式的错误日志记录 有人对解决这个问题有什么好的建议吗 这是我从未考虑过添加到以前的项目中的功能 因此我愿意接受有更多经验的开发人员的建议 我正在考
  • HTML 将 Phaser 移动到容器 div 中

    目前正在 Phaser 中制作一个基于浏览器的游戏并尝试将其添加到容器中div我创建的标签 但是移相器似乎将自身推到容器下方div 两张截图对比 http gyazo com 3cc9b9333cf89d7fc879bd2cdc741609
  • 如何在 Strapi 中将用户不可编辑的字段添加到内容类型?

    说我有一个post具有以下 4 个字段的内容类型 title 细绳 content 细绳 slug 细绳 author 关系 如何添加第五个字段 该字段的值取决于上述 4 个字段之一且用户不可编辑 说吧 我想要一个wordCount字段中的
  • CFBundle可执行错误

    无法安装应用程序 Users myname Documents SDK iPhoneApplications x build Debug iphoneos x app 处的应用程序未指定 CFBundleExecutable 我不知道这意味
  • 在 Silverlight 4 中编辑标题

    我们正在开发一个浏览器外的 Silverlight 4 应用程序 并希望在应用程序加载后更改标题 Example public partial class MainPage UserControl public MainPage Initi
  • 递归深度有限的旅行目录树

    我需要递归地处理目录树中的所有文件 但深度有限 这意味着例如在当前目录和前两个子目录级别中查找文件 但不再进一步查找 在这种情况下 我必须处理例如 subdir1 subdir2 file 但不是 subdir1 subdir2 subdi
  • Xunit 中的测试异常 ()

    我正在尝试对此方法编写 Xunit 测试 public async Task
  • 在 DLL 中,函数表的结构如何?

    我一直在研究不明确支持我的操作系统的设备库的实现 特别是 我有一个反汇编的 DLL 以及大量的支持源代码 现在 功能表 导出表是如何构造的 我的理解是 第一个结构 data部分是 RVA 表 接下来是通过索引链接到第一个地址表的字符串表 这