0

我正在尝试解决 ilrepack克隆ilmerge的问题。但是,我无法理解 PE 文件格式的基本概念以“正确”修复它。

我要合并的所有二进制文件都有一个没有 ID 或名称的条目:

没有 ID 或名称的 ResourceEntry

它们每个中的数据似乎都是 VS_VERSION_INFO 结构。

        "ϐ4\0VS_VERSION_INFO\0\0ҽﻯ\0\t\0䴶ኒ\t\0䴶ኒ?\0\0\0\0\0\0\0\0\0\0\0D\0VarFileInfo\0\0$\0Translation\0\0\0Ұ̰\0StringFileInfo\0̌\0000004b0\0LCompanyName\0\0Just A Programmer LLC\0\\FileDescription\0\0AppDomainPowerShellRunner\0@FileVersion\0\00.9.4754.19766\0\0TInternalName\0JustAProgrammer.ADPR.dll\0\0|,LegalCopyright\0Copyright © Just A Programmer LLC 2011-2012\0\\OriginalFilename\0JustAProgrammer.ADPR.dll\0\0TProductName\0\0AppDomainPowershellRunner\0DProductVersion\00.9.4754.19766\0\0HAssembly Version\00.9.4754.19766\0\0"   string

从我在IMAGE_RESOURCE_DIRECTORY上阅读的所有内容来看,资源条目似乎有名称或 ID。

struct IMAGE_RESOURCE_DIRECTORY
{
    long Characteristics;
    long TimeDateStamp;
    short MajorVersion;
    short MinorVersion;
    short NumberOfNamedEntries;
    short NumberOfIdEntries;
}

所以我的问题是:

  • VS_VERSION_INFO 是资源条目还是资源目录?如果不是,它属于 PE 的哪个部分?
  • 它有ID吗?
  • 它有名字吗?
4

1 回答 1

2

事实上,您的陈述“从我在 IMAGE_RESOURCE_DIRECTORY 上阅读的所有内容来看,资源条目似乎有一个名称或一个 ID。” 是正确的!资源目录中的项目总是有 ID 或名称(按此顺序!)。

是的,VS_VERSION_INFO 是资源目录的成员,它的 ID 是 16。不,它没有名称(因为它是内置资源类型)。

下面是 Truecrypt 图像的快照主机,显示其版本信息资源项(使用 CFF Explorer)

在此处输入图像描述

于 2013-01-06T16:56:48.390 回答