@@ -47,13 +47,13 @@ def get_requirements(cls) -> List[interfaces.configuration.RequirementInterface]
47
47
requirements .ListRequirement (
48
48
name = "virtaddr" ,
49
49
element_type = int ,
50
- description = "Dump a single _FILE_OBJECT at this virtual address" ,
50
+ description = "Dump the _FILE_OBJECTs at the given virtual address(es) " ,
51
51
optional = True ,
52
52
),
53
53
requirements .ListRequirement (
54
54
name = "physaddr" ,
55
55
element_type = int ,
56
- description = "Dump a single _FILE_OBJECT at this physical address" ,
56
+ description = "Dump a single _FILE_OBJECTs at the given physical address(es) " ,
57
57
optional = True ,
58
58
),
59
59
requirements .StringRequirement (
@@ -320,25 +320,24 @@ def _generator(self, procs: List, offsets: List):
320
320
)
321
321
322
322
elif offsets :
323
+ virtual_layer_name = kernel .layer_name
323
324
324
- # Now process any offsets explicitly requested by the user.
325
+ #FIXME - change this after standard access to physical layer
326
+ physical_layer_name = self .context .layers [virtual_layer_name ].config [
327
+ "memory_layer"
328
+ ]
329
+
330
+ # Now process any offsets explicitly requested by the user.
325
331
for offset , is_virtual in offsets :
326
332
try :
327
- layer_name = kernel .layer_name
328
- # switch to a memory layer if the user provided --physaddr instead of --virtaddr
329
- if not is_virtual :
330
- layer_name = self .context .layers [layer_name ].config [
331
- "memory_layer"
332
- ]
333
-
334
333
file_obj = self .context .object (
335
334
kernel .symbol_table_name + constants .BANG + "_FILE_OBJECT" ,
336
- layer_name = layer_name ,
337
- native_layer_name = kernel . layer_name ,
335
+ layer_name = virtual_layer_name if is_virtual else physical_layer_name ,
336
+ native_layer_name = virtual_layer_name ,
338
337
offset = offset ,
339
338
)
340
339
for result in self .process_file_object (
341
- self .context , kernel . layer_name , self .open , file_obj
340
+ self .context , virtual_layer_name , self .open , file_obj
342
341
):
343
342
yield (0 , result )
344
343
except exceptions .InvalidAddressException :
@@ -362,11 +361,11 @@ def run(self):
362
361
for virtaddr in self .config ["virtaddr" ]:
363
362
offsets .append ((virtaddr , True ))
364
363
365
- elif self .config .get ("physaddr" ):
364
+ if self .config .get ("physaddr" ):
366
365
for physaddr in self .config ["physaddr" ]:
367
366
offsets .append ((physaddr , False ))
368
367
369
- else :
368
+ if not offsets :
370
369
filter_func = pslist .PsList .create_pid_filter (
371
370
[self .config .get ("pid" , None )]
372
371
)
0 commit comments