summaryrefslogtreecommitdiff
path: root/binaryreader.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2015-02-12 14:34:50 -0500
committerRusty Wagner <rusty@vector35.com>2015-02-12 14:34:50 -0500
commit83b01dd50407731d14938ac96894c3a4d9065295 (patch)
tree2e3ded7103b51aef0d5cd22434e35f4461aeaeba /binaryreader.cpp
parent6b431b32e32f00f9203ba2a4ca07cc962cdb22aa (diff)
Place API code with the associated class
Diffstat (limited to 'binaryreader.cpp')
-rw-r--r--binaryreader.cpp248
1 files changed, 248 insertions, 0 deletions
diff --git a/binaryreader.cpp b/binaryreader.cpp
new file mode 100644
index 00000000..b30a64b0
--- /dev/null
+++ b/binaryreader.cpp
@@ -0,0 +1,248 @@
+#include "binaryninjaapi.h"
+
+using namespace BinaryNinja;
+using namespace std;
+
+
+BinaryReader::BinaryReader(BinaryView* data, BNEndianness endian): m_view(data)
+{
+ m_stream = BNCreateBinaryReader(data->GetViewObject());
+ BNSetBinaryReaderEndianness(m_stream, endian);
+}
+
+
+BinaryReader::~BinaryReader()
+{
+ BNFreeBinaryReader(m_stream);
+}
+
+
+BNEndianness BinaryReader::GetEndianness() const
+{
+ return BNGetBinaryReaderEndianness(m_stream);
+}
+
+
+void BinaryReader::SetEndianness(BNEndianness endian)
+{
+ BNSetBinaryReaderEndianness(m_stream, endian);
+}
+
+
+void BinaryReader::Read(void* dest, size_t len)
+{
+ if (!BNReadData(m_stream, dest, len))
+ throw ReadException();
+}
+
+
+DataBuffer BinaryReader::Read(size_t len)
+{
+ DataBuffer result(len);
+ Read(result.GetData(), len);
+ return result;
+}
+
+
+string BinaryReader::ReadString(size_t len)
+{
+ DataBuffer result = Read(len);
+ return string((const char*)result.GetData(), len);
+}
+
+
+uint8_t BinaryReader::Read8()
+{
+ uint8_t result;
+ if (!BNRead8(m_stream, &result))
+ throw ReadException();
+ return result;
+}
+
+
+uint16_t BinaryReader::Read16()
+{
+ uint16_t result;
+ if (!BNRead16(m_stream, &result))
+ throw ReadException();
+ return result;
+}
+
+
+uint32_t BinaryReader::Read32()
+{
+ uint32_t result;
+ if (!BNRead32(m_stream, &result))
+ throw ReadException();
+ return result;
+}
+
+
+uint64_t BinaryReader::Read64()
+{
+ uint64_t result;
+ if (!BNRead64(m_stream, &result))
+ throw ReadException();
+ return result;
+}
+
+
+uint16_t BinaryReader::ReadLE16()
+{
+ uint16_t result;
+ if (!BNReadLE16(m_stream, &result))
+ throw ReadException();
+ return result;
+}
+
+
+uint32_t BinaryReader::ReadLE32()
+{
+ uint32_t result;
+ if (!BNReadLE32(m_stream, &result))
+ throw ReadException();
+ return result;
+}
+
+
+uint64_t BinaryReader::ReadLE64()
+{
+ uint64_t result;
+ if (!BNReadLE64(m_stream, &result))
+ throw ReadException();
+ return result;
+}
+
+
+uint16_t BinaryReader::ReadBE16()
+{
+ uint16_t result;
+ if (!BNReadBE16(m_stream, &result))
+ throw ReadException();
+ return result;
+}
+
+
+uint32_t BinaryReader::ReadBE32()
+{
+ uint32_t result;
+ if (!BNReadBE32(m_stream, &result))
+ throw ReadException();
+ return result;
+}
+
+
+uint64_t BinaryReader::ReadBE64()
+{
+ uint64_t result;
+ if (!BNReadBE64(m_stream, &result))
+ throw ReadException();
+ return result;
+}
+
+
+bool BinaryReader::TryRead(void* dest, size_t len)
+{
+ return BNReadData(m_stream, dest, len);
+}
+
+
+bool BinaryReader::TryRead(DataBuffer& dest, size_t len)
+{
+ dest.SetSize(len);
+ return TryRead(dest.GetData(), len);
+}
+
+
+bool BinaryReader::TryReadString(string& dest, size_t len)
+{
+ DataBuffer result(len);
+ if (!TryRead(result.GetData(), len))
+ return false;
+ dest = string((const char*)result.GetData(), len);
+ return true;
+}
+
+
+bool BinaryReader::TryRead8(uint8_t& result)
+{
+ return BNRead8(m_stream, &result);
+}
+
+
+bool BinaryReader::TryRead16(uint16_t& result)
+{
+ return BNRead16(m_stream, &result);
+}
+
+
+bool BinaryReader::TryRead32(uint32_t& result)
+{
+ return BNRead32(m_stream, &result);
+}
+
+
+bool BinaryReader::TryRead64(uint64_t& result)
+{
+ return BNRead64(m_stream, &result);
+}
+
+
+bool BinaryReader::TryReadLE16(uint16_t& result)
+{
+ return BNReadLE16(m_stream, &result);
+}
+
+
+bool BinaryReader::TryReadLE32(uint32_t& result)
+{
+ return BNReadLE32(m_stream, &result);
+}
+
+
+bool BinaryReader::TryReadLE64(uint64_t& result)
+{
+ return BNReadLE64(m_stream, &result);
+}
+
+
+bool BinaryReader::TryReadBE16(uint16_t& result)
+{
+ return BNReadBE16(m_stream, &result);
+}
+
+
+bool BinaryReader::TryReadBE32(uint32_t& result)
+{
+ return BNReadBE32(m_stream, &result);
+}
+
+
+bool BinaryReader::TryReadBE64(uint64_t& result)
+{
+ return BNReadBE64(m_stream, &result);
+}
+
+
+uint64_t BinaryReader::GetOffset() const
+{
+ return BNGetReaderPosition(m_stream);
+}
+
+
+void BinaryReader::Seek(uint64_t offset)
+{
+ BNSeekBinaryReader(m_stream, offset);
+}
+
+
+void BinaryReader::SeekRelative(int64_t offset)
+{
+ BNSeekBinaryReaderRelative(m_stream, offset);
+}
+
+
+bool BinaryReader::IsEndOfFile() const
+{
+ return BNIsEndOfFile(m_stream);
+}