From e99e74cc9ec450b162e366855f923f74b04756f6 Mon Sep 17 00:00:00 2001 From: smiRaphi <87574679+smiRaphi@users.noreply.github.com> Date: Tue, 17 Mar 2026 12:13:45 +0100 Subject: [PATCH 1/2] fix: support latest pefile --- src/dnfile/__init__.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/dnfile/__init__.py b/src/dnfile/__init__.py index daae1d4..2b78eb0 100644 --- a/src/dnfile/__init__.py +++ b/src/dnfile/__init__.py @@ -128,8 +128,11 @@ def get_warnings(self): result.extend(self._warnings) return result - def __parse__(self, fname, data, fast_load): - super().__parse__(fname, data, fast_load) + def __parse__(self, fname, data, fast_load, max_offset=None): + if max_offset is None: + super().__parse__(fname, data, fast_load) + else: + super().__parse__(fname, data, fast_load, max_offset) # NOTE: .NET loaders ignores NumberOfRvaAndSizes # We check this elsewhere, but note it here. From f7bdc3c82994d46c9e16969c0fed2996a6caeeb5 Mon Sep 17 00:00:00 2001 From: smiRaphi <87574679+smiRaphi@users.noreply.github.com> Date: Thu, 26 Mar 2026 21:46:42 +0100 Subject: [PATCH 2/2] Add ability to set max_offset on newer pefile versions --- src/dnfile/__init__.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/dnfile/__init__.py b/src/dnfile/__init__.py index 2b78eb0..eae643f 100644 --- a/src/dnfile/__init__.py +++ b/src/dnfile/__init__.py @@ -47,6 +47,9 @@ def handler(err): codecs.register_error("backslashreplace_", handler) +def func_has_arg(func, arg): + return arg in func.__code__.co_varnames + class dnPE(_PE): def add_warning(self, msg): self._warnings.append(msg) @@ -58,10 +61,15 @@ def __init__( fast_load=None, max_symbol_exports=MAX_SYMBOL_EXPORT_COUNT, clr_lazy_load=False, + *, # args after this are keyword-only + max_offset=0x10000000, ): self._warnings = list() self.clr_lazy_load = clr_lazy_load - super().__init__(name, data, fast_load) + if func_has_arg(super().__init__,'max_offset'): + super().__init__(name, data, fast_load, max_offset=max_offset) + else: + super().__init__(name, data, fast_load) def dump_info(self, dump=None, encoding="utf-8"): """ @@ -129,10 +137,10 @@ def get_warnings(self): return result def __parse__(self, fname, data, fast_load, max_offset=None): - if max_offset is None: - super().__parse__(fname, data, fast_load) + if func_has_arg(super().__parse__,max_offset): + super().__parse__(fname, data, fast_load, max_offset=max_offset) else: - super().__parse__(fname, data, fast_load, max_offset) + super().__parse__(fname, data, fast_load) # NOTE: .NET loaders ignores NumberOfRvaAndSizes # We check this elsewhere, but note it here.