gpt4 book ai didi

c - 如何用简单的 jmp 程序集实现 import lib?

转载 作者:太空宇宙 更新时间:2023-11-04 04:08:16 25 4
gpt4 key购买 nike

生成的导入库(用于链接将加载 dll 的程序的库)AFAICS 将对导入函数的各种调用实现为程序集 jmp 语句。

这看起来确实是一个非常理想的解决方案。它不需要第二次推送参数,也不需要从调用中返回。

我想创建自己的导入库,在其中添加一些其他函数。为此,我必须调用 LoadLibrary()GetProcAddress() 函数来获取 dll 中函数的地址。但是,我必须提供我自己的函数,这些函数将通过函数地址调用导入的函数。但这意味着两次调用,并再次将参数压入堆栈。我希望优化此双重调用。

有谁知道在 C 中实现导入库的方法,该导入库可以执行相同的 jmp 技巧? (或者编译器是否优化了跟踪调用?)

最佳答案

听起来您可能对我认为称为“函数转发”的东西感兴趣。它允许您从一个 DLL 中导出一个函数,该函数实际上是在一个不同的 DLL 中一起实现的。

应该是关于最高效的解决方案

  1. 您不需要调用 LoadLibrary()/GetProcAddress()
  2. 当您从导出的 dll 导入时,加载程序将实际实现的地址存储在导入表中,因此它是一个 call 和一个 jmp

可能最简单的实现方法是使用类似的东西

#pragma comment(linker, "/export:ExportedFuncName=ActualDll.ActualFuncName")

如果您想知道,这与在链接器命令行上传递“/export:ExportedFuncName=ActualDll.ActualFuncName”实际上是一样的。也可以使用模块定义 (.DEF) 文件的导出部分来执行此操作。见here底部了解详情。

关于c - 如何用简单的 jmp 程序集实现 import lib?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3103096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com