From 2e6ecef14b253bb08686b21d148c3505e6786113 Mon Sep 17 00:00:00 2001 From: Michal Bandzi Date: Tue, 13 Mar 2018 17:22:18 +0100 Subject: [PATCH] loader/elf: fix abort on broken binary (#239) --- src/loader/loader/elf/elf_image.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/loader/loader/elf/elf_image.cpp b/src/loader/loader/elf/elf_image.cpp index 77d395013..e3082ceed 100644 --- a/src/loader/loader/elf/elf_image.cpp +++ b/src/loader/loader/elf/elf_image.cpp @@ -238,7 +238,15 @@ ElfImage::SegmentToSectionsTable ElfImage::createSegmentToSectionsTable() std::uint64_t address = elfSeg->getAddress(); std::uint64_t fileOffset = elfSeg->getOffset(); std::uint64_t fileSize = elfSeg->getLoadedSize(); - retdec::utils::Range segRange = retdec::utils::Range(address, address + (memSize ? memSize - 1 : 0)); + std::uint64_t endAddress = address + (memSize ? memSize - 1 : 0); + + if (address > endAddress) + { + // Invalid data - return only partially loaded map + return segToSecsTable; + } + + retdec::utils::Range segRange = retdec::utils::Range(address, endAddress); for (const auto& sec : sections) {