我有一个可执行文件,需要一个dll文件来存在依赖项。我想知道是否有可能实际修补需要dll的PE文件,该文件将从位于内存或资源中的指针读取入口点。如果可能的话我该怎么办?
感谢您的帮助:)
答案 0 :(得分:2)
它不仅仅是DLL中的依赖可执行文件所需的入口点。加载DLL时,系统(PE加载程序)只调用DllMain
。动态加载程序在导入地址表等结构中解析导入的地址,在运行时,应用程序甚至可以通过GetProcAddress
动态解析地址。
理论上可以将DLL重新定位/基于某些未使用的内存部分,并将对其函数的所有引用修补到重定位代码,但这非常困难,需要对操作系统有一个深入的了解。我不确定你在寻找什么样的答案。实现这一目标所需的步骤?这将是非常重要的,我不知道它之前已经完成(我最接近的是用于.NET程序集的ILMerge)。基本上,如果DLL在编译时已经静态链接,那么您正在将代码转换为等效代码。