@@ -16,19 +16,19 @@ class QlRegisterManager:
1616 """
1717
1818 def __init__ (self , ql : Qiling ):
19- self .register_mapping : MutableMapping [str , int ] = {}
19+ # this funny way of initialization is used to avoid calling self setattr and
20+ # getattr upon init. if it did, it would go into an endless recursion
21+ self .register_mapping : MutableMapping [str , int ]
22+ super ().__setattr__ ('register_mapping' , {})
23+
2024 self .ql = ql
2125 self .uc_pc = 0
2226 self .uc_sp = 0
2327
2428 def __getattr__ (self , name : str ) -> Any :
2529 name = name .lower ()
2630
27- # this is checked first to prevent endless recursion upon init
28- if name == 'register_mapping' :
29- return super ().__getattribute__ (name )
30-
31- elif name in self .register_mapping :
31+ if name in self .register_mapping :
3232 return self .ql .uc .reg_read (self .register_mapping [name ])
3333
3434 else :
@@ -38,11 +38,7 @@ def __getattr__(self, name: str) -> Any:
3838 def __setattr__ (self , name : str , value : Any ):
3939 name = name .lower ()
4040
41- # this is checked first to prevent endless recursion upon init
42- if name == 'register_mapping' :
43- super ().__setattr__ (name , value )
44-
45- elif name in self .register_mapping :
41+ if name in self .register_mapping :
4642 self .ql .uc .reg_write (self .register_mapping [name ], value )
4743
4844 else :
0 commit comments