@@ -722,7 +722,8 @@ def create_function_typedefs_from_file(self, f):
722
722
self .function_typedef (name , * data )
723
723
724
724
def global_pointer (
725
- self , cls , binary , identifier , offset = 0 , level = 0 , srv_check = True ):
725
+ self , cls , binary , identifier , offset = 0 , level = 0 , srv_check = True ,
726
+ accessor = False , accessor_offset = 0 ):
726
727
"""Search for a global pointer and wrap the it."""
727
728
manager_logger .log_debug (
728
729
'Retrieving global pointer for {}...' .format (cls .__name__ ))
@@ -731,7 +732,17 @@ def global_pointer(
731
732
binary = find_binary (binary , srv_check )
732
733
733
734
# Get the global pointer
734
- ptr = binary .find_pointer (identifier , offset , level )
735
+ if accessor :
736
+ ptr = binary [identifier ]
737
+ ptr = (ptr + offset + ptr .get_pointer (accessor_offset )).make_function (
738
+ Convention .CDECL ,
739
+ (),
740
+ DataType .POINTER
741
+ )()
742
+ for _ in range (level ):
743
+ ptr = ptr .get_pointer ()
744
+ else :
745
+ ptr = binary .find_pointer (identifier , offset , level )
735
746
736
747
# Raise an error if the pointer is invalid
737
748
if not ptr :
@@ -753,6 +764,8 @@ def create_global_pointers_from_file(self, f):
753
764
(Key .OFFSET , Key .as_int , 0 ),
754
765
(Key .LEVEL , Key .as_int , 0 ),
755
766
(Key .SRV_CHECK , Key .as_bool , True ),
767
+ (Key .ACCESSOR , Key .as_bool , False ),
768
+ (Key .ACCESSOR_OFFSET , Key .as_int , 0 )
756
769
)
757
770
)
758
771
0 commit comments