ImageTool: Made SizeOfImage equal maximum virtual address.

This commit is contained in:
Mikhail Krichanov 2023-03-16 09:53:13 +03:00 committed by MikhailKrichanov
parent 860dcd18cd
commit a0f5b70883

View File

@ -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;