From bf6d310f7513b8ce9a3fcadc8fcb32da43485ccd Mon Sep 17 00:00:00 2001 From: Brandon Miller Date: Mon, 25 Mar 2024 08:13:29 -0400 Subject: Fixed TryReadPointer and ReadPointer APIs Both TryReadPointer and ReadPointer were assuming little endian byte order. TryReadPointer was also only setting 32-bits of the 64-bit value while running against binaries targeting 32-bit CPU architectures --- binaryreader.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'binaryreader.cpp') diff --git a/binaryreader.cpp b/binaryreader.cpp index f94942b5..c49637f9 100644 --- a/binaryreader.cpp +++ b/binaryreader.cpp @@ -106,15 +106,17 @@ uint64_t BinaryReader::Read64() return result; } + uint64_t BinaryReader::ReadPointer() { size_t addressSize = m_view->GetAddressSize(); if (addressSize > 8 || addressSize == 0) throw ReadException(); - uint64_t result = 0; - if (!BNReadData(m_stream, &result, addressSize)) - throw ReadException(); - return result; + + if (GetEndianness() == BigEndian) + return ReadBEPointer(); + + return ReadLEPointer(); } @@ -315,9 +317,11 @@ bool BinaryReader::TryReadPointer(uint64_t& result) size_t addressSize = m_view->GetAddressSize(); if (addressSize > 8 || addressSize == 0) return false; - if (!BNReadData(m_stream, &result, addressSize)) - return false; - return true; + + if (GetEndianness() == BigEndian) + return TryReadBEPointer(result); + + return TryReadLEPointer(result); } -- cgit v1.3.1