gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:48:07 27 4
gpt4 key购买 nike

我想知道我是否可以采用现有的 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 解析其功能形成对比。


关于

when I statically linked the DLLs everything started working great

可能之前您已经显式地动态加载了 DLL,并使用了 GetProcAddress,并且可能与此相关的某些东西无法完美运行。

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

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

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

关于c++ - 静态链接现有的 Windows 二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24556148/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com