summaryrefslogtreecommitdiff
path: root/disasm/dumpobject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'disasm/dumpobject.cpp')
-rw-r--r--disasm/dumpobject.cpp26
1 files changed, 11 insertions, 15 deletions
diff --git a/disasm/dumpobject.cpp b/disasm/dumpobject.cpp
index 4f1a5cc..ae09b12 100644
--- a/disasm/dumpobject.cpp
+++ b/disasm/dumpobject.cpp
@@ -1,31 +1,27 @@
#include "dumpobject.hpp"
-#include "parsefileandrewind.hpp"
-
-#include "le_file.hpp"
+#include "leparseutil.hpp"
#include <distorm.h>
#include <iomanip>
-void dump_object(std::ifstream& ifs, binparse::Value32 object_id)
-{
- auto file = parse_file_and_rewind(ifs);
-
- std::vector<uint8_t> code(std::istreambuf_iterator<char>(ifs), {});
+void dump_object(std::string file_name, binparse::Value32 object_id)
+{
+ std::ifstream ifs(file_name, std::ios::binary);
+ ifs.unsetf(std::ios::skipws);
+ auto file = parse_file(ifs);
+
std::vector<_DecodedInst> instructions;
instructions.resize(100000);
unsigned int read_inst;
-
- auto object = file.object_table.entries[object_id];
- auto index = object.page_table_index;
- binparse::Offset32 offset = file.le_header.data_page_offset;
+ std::vector<uint8_t> code = read_object(ifs, file, object_id);
auto result = distorm_decode64(
- object.reloc_base_address,
- code.data() + offset + (index - 1) * file.le_header.page_size,
- file.object_table.entries[1].nr_page_table_entries * file.le_header.page_size,
+ file.object_table.entries[object_id].reloc_base_address,
+ code.data(),
+ code.size(),
Decode32Bits,
instructions.data(),
instructions.size(),