- if (NtHeader->Signature != EFI_IMAGE_NT_SIGNATURE) {\r
- printf ("ERROR: Unrecognized image signature 0x%08X.\n", NtHeader->Signature);\r
- return EFI_UNSUPPORTED;\r
+ TeHeader = (EFI_TE_IMAGE_HEADER *) Pe32;\r
+ if (TeHeader->Signature == EFI_TE_IMAGE_HEADER_SIGNATURE) {\r
+ //\r
+ // By TeImage Header to get output\r
+ //\r
+ *EntryPoint = TeHeader->AddressOfEntryPoint + sizeof (EFI_TE_IMAGE_HEADER) - TeHeader->StrippedSize;\r
+ *BaseOfCode = TeHeader->BaseOfCode + sizeof (EFI_TE_IMAGE_HEADER) - TeHeader->StrippedSize;\r
+ *MachineType = TeHeader->Machine;\r
+ } else {\r
+ \r
+ //\r
+ // Then check whether \r
+ // First is the DOS header\r
+ //\r
+ DosHeader = (EFI_IMAGE_DOS_HEADER *) Pe32;\r
+ \r
+ //\r
+ // Verify DOS header is expected\r
+ //\r
+ if (DosHeader->e_magic != EFI_IMAGE_DOS_SIGNATURE) {\r
+ printf ("ERROR: Unknown magic number in the DOS header, 0x%04X.\n", DosHeader->e_magic);\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+ //\r
+ // Immediately following is the NT header.\r
+ //\r
+ NtHeader = (EFI_IMAGE_NT_HEADERS *) ((UINTN) Pe32 + DosHeader->e_lfanew);\r
+ \r
+ //\r
+ // Verify NT header is expected\r
+ //\r
+ if (NtHeader->Signature != EFI_IMAGE_NT_SIGNATURE) {\r
+ printf ("ERROR: Unrecognized image signature 0x%08X.\n", NtHeader->Signature);\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+ //\r
+ // Get output\r
+ //\r
+ *EntryPoint = NtHeader->OptionalHeader.AddressOfEntryPoint;\r
+ *BaseOfCode = NtHeader->OptionalHeader.BaseOfCode;\r
+ *MachineType = NtHeader->FileHeader.Machine;\r