diff options
Diffstat (limited to 'disasm/dumpobject.cpp')
| -rw-r--r-- | disasm/dumpobject.cpp | 26 |
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(), |
