静态链接现有的Windows二进制文件

时间:2014-07-03 14:15:06

标签: c++ windows dll

我想知道我是否可以使用现有的Windows DLL和静态链接动态链接的文件?

我看到许多项目都是用Linux / elf来完成的 http://magicermine.com/ http://statifier.sourceforge.net/ http://bitwagon.com/jumpstart/jumpstart.html

我想这很可能是不可能的,但是我在WinPE中遇到了一些问题,当我静态链接DLL时,一切都开始变得很好。

我没有现有DLL的源代码。

我想我可以创建一个暴露所有相同函数和静态链接的传递DLL吗?

1 个答案:

答案 0 :(得分:1)

没有工具支持静态链接DLL的代码。

问题是DLL是一个完整的Windows PE可执行文件,而不是任何意义上的C或C ++“库”。 C ++标准只有一个语句模糊地支持类似于DLL的东西(在main的第一个语句之后的动态初始化中。你运气不好。

但是如果您有源代码(例如使用MFC),而您说没有,那么您可以创建静态库。


请注意,已经 意味着“静态链接”DLL,即加载它并自动解析其功能。

这是使用DLL的常用方法。

与显式加载动态并使用GetProcAddress解析其功能形成鲜明对比。


关于

  

当我静态链接DLL时,一切都开始运行良好

大概早些时候你已经明确地动态地加载了DLL,并且使用了GetProcAddress,并且大概有些东西没有完美地运行。

GetProcAddress的一个主要问题是它假定提供的函数名称被编码为Windows ANSI(由GetACP报告的机器相关编码),然后(显然)将其转换为UTF -8用于函数查找。

一种解决方法可能是按顺序而不是名称访问该功能。

使用Microsoft工具查找序数的一种方法是使用dumpbin /exports