为什么说image_optional_header没有固定尺寸?

问题描述 投票:0回答:1

有许多来源,包括Microsoft文档,上面写着“可选标头没有固定尺寸,其尺寸存储在

FileHeader.SizeOfOptionalHeader
”。

但是image_optional_header结构在内部定义如下。

winnt.h

那么它没有固定尺寸的意思是什么?

如果我想编写一个PE解析器,难道不可能在对PE类型的这些结构上使用
#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES    16

...

typedef struct _IMAGE_OPTIONAL_HEADER {
    //
    // Standard fields.
    //

    WORD    Magic;
    BYTE    MajorLinkerVersion;
    BYTE    MinorLinkerVersion;
    DWORD   SizeOfCode;
    DWORD   SizeOfInitializedData;
    DWORD   SizeOfUninitializedData;
    DWORD   AddressOfEntryPoint;
    DWORD   BaseOfCode;
    DWORD   BaseOfData;

    //
    // NT additional fields.
    //

    DWORD   ImageBase;
    DWORD   SectionAlignment;
    DWORD   FileAlignment;
    WORD    MajorOperatingSystemVersion;
    WORD    MinorOperatingSystemVersion;
    WORD    MajorImageVersion;
    WORD    MinorImageVersion;
    WORD    MajorSubsystemVersion;
    WORD    MinorSubsystemVersion;
    DWORD   Win32VersionValue;
    DWORD   SizeOfImage;
    DWORD   SizeOfHeaders;
    DWORD   CheckSum;
    WORD    Subsystem;
    WORD    DllCharacteristics;
    DWORD   SizeOfStackReserve;
    DWORD   SizeOfStackCommit;
    DWORD   SizeOfHeapReserve;
    DWORD   SizeOfHeapCommit;
    DWORD   LoaderFlags;
    DWORD   NumberOfRvaAndSizes;
    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
操作员,而不是解析

sizeof

字段?

SizeOfOptionalHeader
实际上具有可变的大小 - 如:并非所有条目都必须存在 - 并且可以具有较少的元素,而元素由

DataDirectory
c windows portable-executable
1个回答
0
投票
定义。

在这种情况下,也应该反映标题大小(以便加载器可以找出截面表从哪里开始)。

	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.