diff --git a/BaseTools/Source/C/GenFw/Elf32Convert.c b/BaseTools/Source/C/GenFw/Elf32Convert.c index 41091e0888..d115291b06 100644 --- a/BaseTools/Source/C/GenFw/Elf32Convert.c +++ b/BaseTools/Source/C/GenFw/Elf32Convert.c @@ -21,6 +21,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #endif #include +#include #include #include #include @@ -310,7 +311,15 @@ GetSymName ( assert(Sym->st_name < StrtabShdr->sh_size); - return (UINT8*)mEhdr + StrtabShdr->sh_offset + Sym->st_name; + UINT8* StrtabContents = (UINT8*)mEhdr + StrtabShdr->sh_offset; + + bool foundEnd = false; + for (UINT32 i = Sym->st_name; (i < StrtabShdr->sh_size) && !foundEnd; i++) { + foundEnd = StrtabContents[i] == 0; + } + assert(foundEnd); + + return StrtabContents + Sym->st_name; } // @@ -539,7 +548,7 @@ ScanSections32 ( NtHdr->Pe32.OptionalHeader.Magic = EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC; break; default: - VerboseMsg ("%s unknown e_machine type. Assume IA-32", (UINTN)mEhdr->e_machine); + VerboseMsg ("%s unknown e_machine type %hu. Assume IA-32", mInImageName, mEhdr->e_machine); NtHdr->Pe32.FileHeader.Machine = EFI_IMAGE_MACHINE_IA32; NtHdr->Pe32.OptionalHeader.Magic = EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC; } @@ -725,7 +734,7 @@ WriteSections32 ( } Error (NULL, 0, 3000, "Invalid", - "%s: Bad definition for symbol '%s'@%p or unsupported symbol type. " + "%s: Bad definition for symbol '%s'@%#x or unsupported symbol type. " "For example, absolute and undefined symbols are not supported.", mInImageName, SymName, Sym->st_value); diff --git a/BaseTools/Source/C/GenFw/Elf64Convert.c b/BaseTools/Source/C/GenFw/Elf64Convert.c index 5afd2ab7ca..3b5f630103 100644 --- a/BaseTools/Source/C/GenFw/Elf64Convert.c +++ b/BaseTools/Source/C/GenFw/Elf64Convert.c @@ -21,6 +21,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #endif #include +#include #include #include #include @@ -302,7 +303,15 @@ GetSymName ( assert(Sym->st_name < StrtabShdr->sh_size); - return (UINT8*)mEhdr + StrtabShdr->sh_offset + Sym->st_name; + UINT8* StrtabContents = (UINT8*)mEhdr + StrtabShdr->sh_offset; + + bool foundEnd = false; + for (UINT32 i = Sym->st_name; (i < StrtabShdr->sh_size) && !foundEnd; i++) { + foundEnd = StrtabContents[i] == 0; + } + assert(foundEnd); + + return StrtabContents + Sym->st_name; } // @@ -337,7 +346,7 @@ ScanSections64 ( mCoffOffset += sizeof (EFI_IMAGE_NT_HEADERS64); break; default: - VerboseMsg ("%s unknown e_machine type. Assume X64", (UINTN)mEhdr->e_machine); + VerboseMsg ("%s unknown e_machine type %hu. Assume X64", mInImageName, mEhdr->e_machine); mCoffOffset += sizeof (EFI_IMAGE_NT_HEADERS64); break; } @@ -721,7 +730,7 @@ WriteSections64 ( } Error (NULL, 0, 3000, "Invalid", - "%s: Bad definition for symbol '%s'@%p or unsupported symbol type. " + "%s: Bad definition for symbol '%s'@%#llx or unsupported symbol type. " "For example, absolute and undefined symbols are not supported.", mInImageName, SymName, Sym->st_value);