From 00622fa4829c3852ffad840fb7f94cc96ecee83f Mon Sep 17 00:00:00 2001 From: Mason Reed Date: Tue, 5 Nov 2024 17:50:49 -0500 Subject: MSVC RTTI: More robust CompleteObjectLocator verification Must be within section now --- plugins/msvc_rtti/rtti.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'plugins/msvc_rtti/rtti.cpp') diff --git a/plugins/msvc_rtti/rtti.cpp b/plugins/msvc_rtti/rtti.cpp index 56b53477..073acdd6 100644 --- a/plugins/msvc_rtti/rtti.cpp +++ b/plugins/msvc_rtti/rtti.cpp @@ -75,7 +75,10 @@ std::optional ReadCompleteObjectorLocator(BinaryView *vie { auto coLocator = CompleteObjectLocator(view, address); uint64_t startAddr = view->GetOriginalImageBase(); - uint64_t endAddr = view->GetEnd(); + + auto outsideSection = [&](uint64_t addr) { + return view->GetSectionsAt(addr).empty(); + }; if (coLocator.signature > 1) return std::nullopt; @@ -86,18 +89,19 @@ std::optional ReadCompleteObjectorLocator(BinaryView *vie return std::nullopt; // Relative addrs - if (coLocator.pTypeDescriptor + startAddr > endAddr) + if (outsideSection(coLocator.pTypeDescriptor + startAddr)) return std::nullopt; - if (coLocator.pClassHeirarchyDescriptor + startAddr > endAddr) + if (outsideSection(coLocator.pClassHeirarchyDescriptor + startAddr)) return std::nullopt; - } else + } + else { // Absolute addrs - if (coLocator.pTypeDescriptor < startAddr || coLocator.pTypeDescriptor > endAddr) + if (outsideSection(coLocator.pTypeDescriptor)) return std::nullopt; - if (coLocator.pClassHeirarchyDescriptor < startAddr || coLocator.pClassHeirarchyDescriptor > endAddr) + if (outsideSection(coLocator.pClassHeirarchyDescriptor)) return std::nullopt; } -- cgit v1.3.1