def __init__(self, *args, **options): """We make a sub table for rendering the _EPROCESS.""" self.name = options.pop("name", "_EPROCESS") super(EPROCESS_TextObjectRenderer, self).__init__(*args, **options) # pstree requests light output so we ovverride the style self.output_style = options.pop("style", self.output_style) if self.output_style == "full": self.table = text.TextTable(columns=[ dict(name=self.name, formatstring="[addrpad]"), dict(name="name", width=20), dict(name="fullpath", width=60), dict(name="pid", width=5, align="r"), dict(name="ppid", width=5, align="r") ], renderer=self.renderer, session=self.session) else: self.table = text.TextTable(columns=[ dict(name=self.name, formatstring="[addrpad]"), dict(name="name", width=20), dict(name="pid", width=5, align="r") ], renderer=self.renderer, session=self.session)
def __init__(self, *args, **kwargs): self.columns = kwargs.pop("columns", self.COLUMNS) super(StructTextRenderer, self).__init__(*args, **kwargs) if self.columns: self.table = text.TextTable(columns=self.columns, renderer=self.renderer, session=self.session)
def __init__(self, *args, **kwargs): """We make a sub table for key, values.""" super(ListRenderer, self).__init__(*args, **kwargs) self.table = text.TextTable(columns=[ dict(name="x"), ], auto_widths=True, renderer=self.renderer, session=self.session)
def __init__(self, *args, **kwargs): self.style = kwargs.pop("style", "value") self.name = kwargs.pop("name", "Entity") # Build up the list of columns we want to display. columns = kwargs.pop("columns", []) self.column_getters = [] renderer_headers = [] for column in columns: column_attr = None column_name = None column_style = None column_width = None column_getter = None if isinstance(column, basestring): column_attr = column elif isinstance(column, dict): column_name = column.get("name") column_getter = column.get("fn") column_attr = column.get("attribute") column_style = column.get("style") column_width = column.get("width") else: raise ValueError( "Column must be dict or a basestring. Got %s." % ( type(column))) if not column_getter: if not column_attr: raise ValueError( "Must specify either 'attribute' or 'fn'.") attribute_obj = entity.Entity.reflect_attribute(column_attr) if not attribute_obj: raise ValueError( "Attribute %s doesn't exist." % column_attr) column_getter = self._column_getter(attribute_obj.path) column_width = column_width or attribute_obj.width column_style = column_style or attribute_obj.style if not column_name: if column_attr: column_name = column_attr.split("/")[-1] else: column_attr = "untitled column" renderer_headers.append(dict(name=column_name, width=column_width, style=column_style)) self.column_getters.append(column_getter) super(Entity_TextObjectRenderer, self).__init__(*args, **kwargs) self.table = text.TextTable(columns=renderer_headers, renderer=self.renderer, session=self.session)
def __init__(self, *args, **options): """We make a sub table for rendering the _EPROCESS.""" self.name = options.pop("name", "_EPROCESS") self.style = options.pop("style", "full") super(EPROCESS_TextObjectRenderer, self).__init__(*args, **options) self.table = text.TextTable(columns=[ dict(name=self.name, cname="eprocess", formatstring="[addrpad]"), dict(name="Name", cname="name", width=20), dict(name="PID", cname="pid", width=5, align="r") ], renderer=self.renderer, session=self.session)
def __init__(self, *args, **options): self.quick = options.pop("quick", False) super(VirtualizationNode_TextObjectRenderer, self).__init__( *args, **options) self.table = text.TextTable( columns=[ dict(name="description"), dict(name="name", width=20), dict(name="valid", type="bool"), dict(name="ept")], renderer=self.renderer, session=self.session)
def __init__(self, *args, **options): """We make a sub table for rendering the _EPROCESS.""" self.name = options.pop("name", "proc") self.style = options.pop("style", "full") super(Proc_TextObjectRenderer, self).__init__(*args, **options) self.table = text.TextTable(columns=[ dict(name=self.name, style="address"), dict(name="Name", width=20, align="c"), dict(name="PID", width=5, align="r") ], renderer=self.renderer, session=self.session)
def render_full(self, target, width=None, **_): table = text.TextTable( columns=[ dict(name="Address", style="address"), dict(name="OpCode", width=16), dict(name="Op", width=width) ], renderer=self.renderer, session=self.session) result = [] for instruction in target.disassemble(): result.append(unicode(table.get_row( instruction.address, instruction.hexbytes, instruction.text))) return text.Cell("\n".join(result))
def render_row(self, target, **_): column_names = [x["name"] for x in target.fields] table = text.TextTable(columns=target.fields, renderer=self.renderer, session=self.session) if not target.results: return text.Cell("") result = [ text.JoinedCell(*[text.Cell(x) for x in column_names]), text.JoinedCell(*[text.Cell("-" * len(x)) for x in column_names]) ] for row in target.results: ordered_row = [] for column in column_names: ordered_row.append(row.get(column)) result.append(table.get_row(*ordered_row)) result = text.StackedCell(*result) return result