是否可以在 Windows 上运行时从可执行文件中定位函数?
Posted
技术标签:
【中文标题】是否可以在 Windows 上运行时从可执行文件中定位函数?【英文标题】:Is it possible to locate functions from executable at runtime on Windows? 【发布时间】:2015-03-07 13:27:58 【问题描述】:我将代码注入到 Windows 中的函数中以创建挂钩。我在进程中有这个线程,它成功地为 DLL 导出的函数创建了钩子。
我计划扩展此功能以在可执行文件本身中包含一些函数或方法。我现在只需要一个指向函数的指针,以便使用字节码级代码注入创建挂钩。
现在是否可以在运行时在进程内存中定位函数,这些函数是从可执行文件本身加载的?
【问题讨论】:
请定义“定位函数”的含义。你建议如何识别它们?您有哪些可用于可执行文件的元数据? PDB 文件? MAP 文件? @DavidHeffernan 我只有 .exe 文件,它会加载一些 DLL。 另外,通过定位函数,我的意思是在运行时找到指向它们的指针。 除非有问题的函数是从模块中导出的(在这种情况下定位它们很简单),否则甚至无法识别函数。这些函数没有名称。您必须知道使用它们的地址。 【参考方案1】:当源代码被编译成可执行代码时,函数和变量名之类的东西会丢失。除非您有调试信息数据库、.pdb/.dbg 或映射文件、.map 等元数据,否则您通常无法找到函数。
如果该函数是由模块导出的,那么你可以通过GetProcAddress
找到它的地址。
【讨论】:
以上是关于是否可以在 Windows 上运行时从可执行文件中定位函数?的主要内容,如果未能解决你的问题,请参考以下文章