@@ -23,6 +23,7 @@ def __init__(self, gdb_client, name="decompiler", host="127.0.0.1", port=3662):
23
23
self .symbol_mapper = SymbolMapper ()
24
24
self ._is_pie = None
25
25
self ._lvar_bptr = None
26
+ self ._symbol_cache = set ()
26
27
27
28
@property
28
29
@lru_cache ()
@@ -52,6 +53,13 @@ def decompiler_connected(self):
52
53
def decompiler_disconnected (self ):
53
54
self .gdb_client .on_decompiler_disconnected (self .name )
54
55
56
+ def _cache (self , item ):
57
+ if item in self ._symbol_cache :
58
+ return False
59
+
60
+ self ._symbol_cache .add (item )
61
+ return True
62
+
55
63
def update_symbols (self ):
56
64
self .symbol_mapper .text_base_addr = self .text_base_addr
57
65
@@ -66,7 +74,10 @@ def update_symbols(self):
66
74
67
75
# add symbols with native support if possible
68
76
for addr , func in func_headers .items ():
69
- syms_to_add .append ((func ["name" ], int (addr , 0 ), "function" , func ["size" ]))
77
+ symbol = (func ["name" ], int (addr , 0 ), "function" , func ["size" ])
78
+ new_entry = self ._cache (symbol )
79
+ if new_entry :
80
+ syms_to_add .append (symbol )
70
81
sym_name_set .add (func ["name" ])
71
82
72
83
for addr , global_var in global_vars .items ():
@@ -75,7 +86,10 @@ def update_symbols(self):
75
86
if clean_name in sym_name_set :
76
87
continue
77
88
78
- syms_to_add .append ((clean_name , int (addr , 0 ), "object" , global_var_size ))
89
+ symbol = (clean_name , int (addr ,0 ), "object" , global_var_size )
90
+ new_entry = self ._cache (symbol )
91
+ if new_entry :
92
+ syms_to_add .append (symbol )
79
93
80
94
try :
81
95
self .symbol_mapper .add_native_symbols (syms_to_add )
0 commit comments