summaryrefslogtreecommitdiff
path: root/le/le_file.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'le/le_file.cpp')
-rw-r--r--le/le_file.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/le/le_file.cpp b/le/le_file.cpp
index b6aa54f..55478c8 100644
--- a/le/le_file.cpp
+++ b/le/le_file.cpp
@@ -19,8 +19,12 @@ BOOST_FUSION_ADAPT_STRUCT(
(le::Header, le_header)
(le::ObjectTable, object_table)
(le::ObjectPageTable, object_page_table)
+ (le::ObjectIterateDataMapTable, object_iterate_data_map_table)
+ (le::ResourceTable, resource_table)
(le::ResidentNameTable, resident_name_table)
(le::EntryTable, entry_table)
+ (le::FixupPageTable, fixup_page_table)
+ (le::FixupRecordTable, fixup_record_table)
)
namespace le {
@@ -39,14 +43,13 @@ File parse_file(std::istream& is) {
binparse::dump_bytes(is, dos_exe, "dos_exe");
auto le_h = le::parse_header(is);
-
auto object_table = parse_object_table(is, le_offset + le_h.object_table_offset, le_h.nr_objects_in_module);
-
auto object_page_table = parse_object_page_table(is, le_offset + le_h.object_page_table_offset, le_h.module_nr_of_pages);
-
auto resident_name_table = parse_resident_name_table(is, le_offset + le_h.resident_name_table_offset);
-
auto entry_table = parse_entry_table(is, le_offset + le_h.entry_table_offset);
+ auto resource_table = parse_resource_table(is, le_offset + le_h.resource_table_offset, le_h.nr_resource_table_entries);
+ auto fixup_page_table = parse_fixup_page_table(is, le_offset + le_h.fixup_page_table_offset, le_h.module_nr_of_pages + binparse::Value32(1));
+ auto fixup_record_table = parse_fixup_record_table(is, le_offset + le_h.fixup_record_table_offset, fixup_page_table);
return {
mz_h,
@@ -58,8 +61,12 @@ File parse_file(std::istream& is) {
le_h,
object_table,
object_page_table,
+ {},
+ resource_table,
resident_name_table,
- entry_table
+ entry_table,
+ fixup_page_table,
+ fixup_record_table
};
}