【发布时间】:2010-03-11 06:11:44
【问题描述】:
我想将一些二进制数据附加到我的可执行文件的末尾。这只是为了让我的程序变成一个文件。我尝试使用 UpdateResource,但我用我的特定数据在其中遇到了一些错误,所以我必须使用另一种解决方案。所以我需要知道原始文件的大小来确定是否真的有任何数据附加到它上面。是否可以从 PE 标头中获取此信息?
谢谢!
【问题讨论】:
-
“我用我的特定数据在其中遇到了一些错误”是什么意思?据我所知,UpdateResource 只适用于二进制数据块,因此该数据的细节无关紧要。
-
UpdateResource可以处理二进制数据块(RT_RCDATA类型)。但是,如果您传递其他内容,则数据的细节确实很重要。例如。 “所有包含字符串或文本的数据都必须是 Unicode 格式。”这表明当它拒绝您的 ASCII 字符串时,您可能会遇到“错误”。 -
这仅适用于您使用具有字符串数据的预定义数据类型之一。 RT_RCDATA 只是一个二进制 blob; Windows 不知道也不关心它包含什么样的数据。只要你正确序列化和反序列化它就可以正常工作。
-
我使用 RT_RCDATA,但是当我添加其中两个时,它们会导致 kernel32.dll 崩溃。我能够使用 XN 资源编辑器重现崩溃,因此我将其视为“外部错误”并在其他地方寻找解决方案...
-
一定是XN资源编辑器的bug。数据是不是特别大?它的结构如何?我已经使用 UpdateResource 成功地将大型 (50+ MB) zip 文件添加为资源,所以我不确定为什么您的数据会如此特别。如果你坚持走 PE 路线,我会使用 3rd 方库,因为解析 PE 文件充满危险。
标签: c++ c winapi portable-executable