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

Static link an existing windows binary

本文关键字:windows 二进制文件 链接 静态      更新时间:2023-10-16

我想知道我是否可以采取现有的windows DLL和静态链接的动态链接文件?

我看到许多项目在Linux/elf中这样做http://magicermine.com/http://statifier.sourceforge.net/http://bitwagon.com/jumpstart/jumpstart.html

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

我没有现有DLL的源代码。

我想我可以做一个直通DLL暴露所有相同的函数和静态链接?

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

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

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


请注意,已经是静态链接的含义。一个DLL,即加载它并自动解析它的函数。

这是使用DLL的常用方法。

这与显式动态加载并使用GetProcAddress解析其函数形成对比。


关于

当我静态链接dll时,一切都开始正常工作

可能之前你已经显式地动态加载了dll,并且使用了GetProcAddress,并且可能有些事情没有完美地工作。

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

一种解决方法是通过序数而不是名称访问函数。

使用微软的工具找到序数的一种方法是使用dumpbin /exports