diff options
| author | Rusty Wagner <rusty@vector35.com> | 2015-02-12 14:34:50 -0500 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2015-02-12 14:34:50 -0500 |
| commit | 83b01dd50407731d14938ac96894c3a4d9065295 (patch) | |
| tree | 2e3ded7103b51aef0d5cd22434e35f4461aeaeba /binaryreader.cpp | |
| parent | 6b431b32e32f00f9203ba2a4ca07cc962cdb22aa (diff) | |
Place API code with the associated class
Diffstat (limited to 'binaryreader.cpp')
| -rw-r--r-- | binaryreader.cpp | 248 |
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); +} |
