Skip to content

Commit 6372b6f

Browse files
committed
symbols getters follow vol2 format
1 parent 1a73717 commit 6372b6f

File tree

1 file changed

+18
-18
lines changed
  • volatility3/framework/symbols/linux/extensions

1 file changed

+18
-18
lines changed

volatility3/framework/symbols/linux/extensions/__init__.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)