mirror of https://github.com/acidanthera/audk.git
OVMF SEC: Modify to search sections of FFS file for PE32 image.
Previously the code would expect that the PE32 image was in the first section of the FFS file. This might not be the case if the PE32 section is forced to be aligned. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9331 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
d7576cf9b6
commit
9337cf8c99
Binary file not shown.
Binary file not shown.
|
@ -144,6 +144,7 @@ peiCoreEntryPointWasFound:
|
|||
;
|
||||
; Input:
|
||||
; EAX - Start of FFS file
|
||||
; ECX - End of FFS file
|
||||
;
|
||||
; Output:
|
||||
; EAX - Entry point of PE32 (or 0 if not found)
|
||||
|
@ -154,11 +155,33 @@ peiCoreEntryPointWasFound:
|
|||
GetEntryPointOfFfsFileReturnEdx:
|
||||
test eax, eax
|
||||
jz getEntryPointOfFfsFileErrorReturn
|
||||
add eax, 0x18 ; EAX = Start of section
|
||||
|
||||
cmp byte [eax + 0x1b], EFI_SECTION_PE32
|
||||
jne getEntryPointOfFfsFileErrorReturn
|
||||
getEntryPointOfFfsFileLoopForSections:
|
||||
cmp eax, ecx
|
||||
jae getEntryPointOfFfsFileErrorReturn
|
||||
|
||||
add eax, 0x1c ; EAX = Start of PE32 image
|
||||
cmp byte [eax + 3], EFI_SECTION_PE32
|
||||
je getEntryPointOfFfsFileFoundPe32Section
|
||||
|
||||
;
|
||||
; The section type was not PE32, so move to next section
|
||||
;
|
||||
mov ebx, dword [eax]
|
||||
and ebx, 0x00ffffff
|
||||
add eax, ebx
|
||||
jc getEntryPointOfFfsFileErrorReturn
|
||||
|
||||
;
|
||||
; Ensure that FFS section is 32-bit aligned
|
||||
;
|
||||
add eax, 3
|
||||
jc getEntryPointOfFfsFileErrorReturn
|
||||
and al, 0xfc
|
||||
jmp getEntryPointOfFfsFileLoopForSections
|
||||
|
||||
getEntryPointOfFfsFileFoundPe32Section:
|
||||
add eax, 4 ; EAX = Start of PE32 image
|
||||
|
||||
mov ebx, eax
|
||||
cmp word [eax], 'MZ'
|
||||
|
|
Loading…
Reference in New Issue