diff --git a/qiling/loader/pe.py b/qiling/loader/pe.py index 30959d0f8..f9ac1bb65 100644 --- a/qiling/loader/pe.py +++ b/qiling/loader/pe.py @@ -462,6 +462,10 @@ def call_dll_entrypoint(self, dll: pefile.PE, dll_base: int, dll_len: int, dll_n self.ql.log.error(f'Error encountered while running {dll_name} DllMain, bailing') self.ql.arch.regs.restore(regs_state) + + # emu_start leaves the state at STARTED when it raises; reset it so a single + # failing DllMain does not gate every subsequently loaded DLL's entry point. + self.ql._state = QL_STATE.STOPPED else: fcall.cc.unwind(len(args))