@@ -132,37 +132,37 @@ def get_symbols(self):
132132 ),
133133 count = self .num_symtab + 1 ,
134134 )
135-
136135 if self .section_strtab :
137136 for sym in syms :
137+ sym_arr = self ._context .object (
138+ self .get_symbol_table_name () + constants .BANG + "array" ,
139+ layer_name = self .vol .native_layer_name ,
140+ offset = self .section_strtab + sym .st_name ,
141+ )
138142 try :
139- sym_offset = self .section_strtab + sym .st_name
140- sym_name = self ._context .layers [self .vol .layer_name ].read (
141- sym_offset , 512
142- ) # 512 is the value of KSYM_NAME_LEN
143- except exceptions .PagedInvalidAddressException :
143+ sym_name = utility .array_to_string (
144+ sym_arr , 512
145+ ) # 512 is the value of KSYM_NAME_LEN kernel constant
146+ except exceptions .InvalidAddressException :
144147 continue
145-
146- # Stop at first null byte (strtab is a null terminated strings list)
147- sym_name = sym_name .split (b"\x00 " )[0 ].decode ("latin-1" )
148148 if sym_name != "" :
149- # Normalize sym_value
149+ # Normalize sym.st_value offset, which is an address pointing to the symbol value
150150 mask = self ._context .layers [self .vol .layer_name ].address_mask
151- sym_value = sym .st_value & mask
152- yield (sym_name , sym_value , sym_offset )
151+ sym_address = sym .st_value & mask
152+ yield (sym_name , sym_address )
153153
154154 def get_symbol (self , wanted_sym_name ):
155155 """Get symbol value for a given symbol name"""
156- for sym_name , sym_value , sym_offset in self .get_symbols ():
156+ for sym_name , sym_address in self .get_symbols ():
157157 if wanted_sym_name == sym_name :
158- return sym_value
158+ return sym_address
159159
160160 return None
161161
162- def get_symbol_name_from_value (self , wanted_sym_value ):
163- """Get symbol name for a given symbol value """
164- for sym_name , sym_value , sym_offset in self .get_symbols ():
165- if wanted_sym_value == sym_value :
162+ def get_symbol_from_address (self , wanted_sym_address ):
163+ """Get symbol name for a given symbol address """
164+ for sym_name , sym_address in self .get_symbols ():
165+ if wanted_sym_address == sym_address :
166166 return sym_name
167167
168168 return None
0 commit comments