静态链接到现有的windows二进制文件
Static link an existing windows binary
我想知道我是否可以采取现有的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
。
- 正在读取二进制文件(is_open)
- 在C++中将类(带有Vector成员)保存为二进制文件
- 如何从二进制文件中读取字符串
- 保存/加载大量短数组到二进制文件
- 从二进制文件中读取整数数组
- Android 在编译二进制文件时重建静态库
- 在 C++ 中将双精度变量写入二进制文件
- clang 的 libFuzzer 可以在同一二进制文件中测试超过 1 个 API 吗?
- 有没有适用于Windows.lib文件的GNU二进制文件描述符(BFD)
- 当与Windows和Linux下的Ifstream相反的二进制文件时,结果不同
- 在哪里可以下载适用于 Windows 的 GCC 4.3.2 二进制文件
- Linux:无法读取在Windows上编写的二进制文件
- 用于静态分析本机Windows二进制文件大小的工具
- 我如何编译peercoin生成windows二进制文件
- 二进制文件在Windows上比在Linux上要小
- 在哪里可以找到一个分析器来减少msvc++ /Windows上的二进制文件大小
- 静态链接到现有的windows二进制文件
- c++ windows二进制文件:使用MinGW的条件
- 简单的方式编译简单的windows二进制文件
- 从Windows二进制文件中删除msvcp90d.dll依赖