Browse Source

Prevent vtable candidate iterable from being exhausted in initial loop

nosoop 10 months ago
parent
commit
956dcc245d
1 changed files with 3 additions and 1 deletions
  1. 3 1
      src/smgdc/angr/vtable_disamb.py

+ 3 - 1
src/smgdc/angr/vtable_disamb.py

@@ -140,9 +140,11 @@ class VtableDisambiguator(angr.Analysis):
 
         rebased_fnsym_addrs = set(fnsym.rebased_addr for fnsym in ambig_fnsyms)
 
+        # prevent iterable from being consumed in the first iteration
+        rel_vtsyms = set(related_vtsyms)
         for fnsym in ambig_fnsyms - non_class_syms:
             funcsig = dh.extract_method_signature(demangler.parse(fnsym.name))
-            for svt in related_vtsyms:
+            for svt in rel_vtsyms:
                 # only check functions at the same index
                 subfn_addr = self.loader.fast_memory_load_pointer(
                     svt.rebased_addr + 0x4 * (2 + vtidx)