From a0f5b708834756f867f505310592dfb7dc0f2708 Mon Sep 17 00:00:00 2001 From: Mikhail Krichanov Date: Thu, 16 Mar 2023 09:53:13 +0300 Subject: [PATCH] ImageTool: Made SizeOfImage equal maximum virtual address. --- BaseTools/ImageTool/PeEmit.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/BaseTools/ImageTool/PeEmit.c b/BaseTools/ImageTool/PeEmit.c index ecb727b5c1..806d7e8ddd 100644 --- a/BaseTools/ImageTool/PeEmit.c +++ b/BaseTools/ImageTool/PeEmit.c @@ -496,6 +496,7 @@ ToolImageEmitPeHeaders ( PePlusHdr->SectionAlignment = Image->SegmentInfo.SegmentAlignment; PePlusHdr->FileAlignment = Context->FileAlignment; PePlusHdr->SizeOfHeaders = AlignedHeaderSize; + PePlusHdr->SizeOfImage = AlignedHeaderSize; PePlusHdr->ImageBase = (UINTN)Image->HeaderInfo.PreferredAddress; PePlusHdr->Subsystem = Image->HeaderInfo.Subsystem; PePlusHdr->NumberOfRvaAndSizes = Context->HdrInfo.NumberOfRvaAndSizes; @@ -566,6 +567,8 @@ ToolImageEmitPeSections ( for (Index = 0; Index < Image->SegmentInfo.NumSegments; ++Index) { Segment = &Image->SegmentInfo.Segments[Index]; + Context->PeHdr->SizeOfImage += Segment->ImageSize; + if (FirstCode && (Segment->Type == ToolImageSectionTypeCode)) { Context->PeHdr->BaseOfCode = (UINT32)Segment->ImageAddress; FirstCode = false; @@ -649,6 +652,8 @@ ToolImageEmitPeRelocTable ( Image = Context->Image; + Context->PeHdr->SizeOfImage += ALIGN_VALUE (Context->RelocTableSize, Image->SegmentInfo.SegmentAlignment); + assert (Image->RelocInfo.NumRelocs > 0); assert (Image->RelocInfo.NumRelocs <= MAX_UINT32); @@ -748,6 +753,8 @@ ToolImageEmitPeDebugTable ( return true; } + Context->PeHdr->SizeOfImage += ALIGN_VALUE (Context->DebugTableSize, Image->SegmentInfo.SegmentAlignment); + assert (Image->DebugInfo.SymbolsPathLen <= Context->DebugTableSize); assert (Context->DebugTableSize <= *BufferSize); @@ -798,6 +805,8 @@ ToolImageEmitPeHiiTable ( return true; } + Context->PeHdr->SizeOfImage += ALIGN_VALUE (Image->HiiInfo.DataSize, Image->SegmentInfo.SegmentAlignment); + assert (Image->HiiInfo.DataSize <= Context->HiiTableSize); assert (Context->HiiTableSize <= *BufferSize); @@ -979,7 +988,6 @@ ToolImageEmitPe ( assert (RemainingSize == ExpectedSize); assert (RemainingSize == 0); - Context.PeHdr->SizeOfImage = Context.UnsignedFileSize; Context.PeHdr->SizeOfInitializedData += Context.ExtraSectionsSize; *FileSize = Context.UnsignedFileSize;