diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2020-04-30 16:44:49 +0200 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2020-04-30 17:19:52 +0200 |
| commit | 211df1f07332c4548993e17a6f43a4b7a6e43530 (patch) | |
| tree | 18018283e6889371eeef4e6de97bb4fd3c7c000c | |
| parent | 8f691c21c4bb0aff342471c57b2045ac604f6c91 (diff) | |
| download | miasm-211df1f07332c4548993e17a6f43a4b7a6e43530.tar.gz miasm-211df1f07332c4548993e17a6f43a4b7a6e43530.zip | |
Loader: Fix resource rebuild
| -rw-r--r-- | miasm/loader/pe.py | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/miasm/loader/pe.py b/miasm/loader/pe.py index cd5d9370..90d8b12a 100644 --- a/miasm/loader/pe.py +++ b/miasm/loader/pe.py @@ -1306,19 +1306,6 @@ class DirRes(CStruct): out = [] tmp_off = off - for _ in range(nbr): - if tmp_off >= ofend: - break - if tmp_off + length >= len(raw): - log.warn('warning bad resource offset') - break - try: - entry, length = ResEntry.unpack_l(raw, tmp_off, self.parent_head) - except RuntimeError: - log.warn('bad resentry') - return None, tmp_off - out.append(entry) - tmp_off += length resdesc.resentries = struct_array(self, raw, off, ResEntry, @@ -1372,17 +1359,21 @@ class DirRes(CStruct): return of1 = self.parent_head.NThdr.optentries[DIRECTORY_ENTRY_RESOURCE].rva raw[self.parent_head.rva2off(of1)] = bytes(self.resdesc) - dir_todo = {self.parent_head.NThdr.optentries[ - DIRECTORY_ENTRY_RESOURCE].rva: self.resdesc} + length = len(self.resdesc) + dir_todo = { + self.parent_head.NThdr.optentries[DIRECTORY_ENTRY_RESOURCE].rva: self.resdesc + } + of1 = of1 + length + raw[self.parent_head.rva2off(of1)] = bytes(self.resdesc.resentries) dir_done = {} while dir_todo: of1, my_dir = dir_todo.popitem() dir_done[of1] = my_dir raw[self.parent_head.rva2off(of1)] = bytes(my_dir) of1 += len(my_dir) + raw[self.parent_head.rva2off(of1)] = bytes(my_dir.resentries) of_base = of1 for entry in my_dir.resentries: - raw[of_base] = bytes(entry) of_base += len(entry) if entry.name_s: raw[self.parent_head.rva2off(entry.name)] = bytes(entry.name_s) |