summaryrefslogtreecommitdiff
path: root/disasm/leparseutil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'disasm/leparseutil.cpp')
-rw-r--r--disasm/leparseutil.cpp31
1 files changed, 31 insertions, 0 deletions
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<uint8_t> 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<uint8_t> vec;
+ vec.reserve(length);
+
+ std::copy_n(std::istream_iterator<uint8_t>(is), length, std::back_inserter(vec));
+ return vec;
+}
+
+std::vector<uint8_t> 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;
+}