From 4f65043e40dbaf8e4cc290327e34270645dedce3 Mon Sep 17 00:00:00 2001 From: Dennis Brentjes Date: Sat, 10 Sep 2016 16:04:23 +0200 Subject: Fixes differences in between input buffers in different parts. Now opens files in binary mode, and added some conveniance functions to read parts of the binary file. --- disasm/leparseutil.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 disasm/leparseutil.cpp (limited to 'disasm/leparseutil.cpp') diff --git a/disasm/leparseutil.cpp b/disasm/leparseutil.cpp new file mode 100644 index 0000000..9c4e790 --- /dev/null +++ b/disasm/leparseutil.cpp @@ -0,0 +1,31 @@ +#include "leparseutil.hpp" + +std::vector read_file_part(std::istream& is, std::streamsize offset, size_t length) { + is.clear(); + is.seekg(0, std::ios::beg); + + is.ignore(offset); + + std::vector vec; + vec.reserve(length); + + std::copy_n(std::istream_iterator(is), length, std::back_inserter(vec)); + return vec; +} + +std::vector read_object(std::istream& is, le::File file, binparse::Value32 object_id) { + auto object = file.object_table.entries[object_id]; + auto index = object.page_table_index; + + return read_file_part(is, file.le_header.data_page_offset, file.le_header.page_size * (object.nr_page_table_entries -(index -1))); +} + +le::File parse_file(std::istream& is) +{ + is.clear(); + is.seekg(0, std::ios::beg); + + auto file = le::parse_file(is); + + return file; +} -- cgit v1.2.3-70-g09d2