diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2016-09-10 16:04:23 +0200 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2016-09-10 16:04:23 +0200 |
| commit | 4f65043e40dbaf8e4cc290327e34270645dedce3 (patch) | |
| tree | 8fe2979b77d0edfd99d64db77ae43a437b888fca /disasm/dumpobject.cpp | |
| parent | cec56db9d4c84de13796ce7cd7dcd2631c443cec (diff) | |
| download | openwar-4f65043e40dbaf8e4cc290327e34270645dedce3.tar.gz openwar-4f65043e40dbaf8e4cc290327e34270645dedce3.tar.bz2 openwar-4f65043e40dbaf8e4cc290327e34270645dedce3.zip | |
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.
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(), |
