-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathguid_renderer.py
31 lines (25 loc) · 1.22 KB
/
guid_renderer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from binaryninja import DataRenderer, DisassemblyTextLine, InstructionTextToken, InstructionTextTokenType, BinaryReader
class EfiGuidDataRenderer(DataRenderer):
"""
DataRenderer for displaying EFI_GUID in a more human-readable manner.
"""
def __init__(self):
DataRenderer.__init__(self)
def perform_is_valid_for_data(self, ctxt, view, addr, typ, context):
return DataRenderer.is_type_of_struct_name(typ, "EFI_GUID", context)
def perform_get_lines_for_data(self, ctxt, view, addr, typ, prefix, width, context):
result = [DisassemblyTextLine(prefix, addr)]
reader = BinaryReader(view)
reader.seek(addr)
data1 = reader.read32()
data2 = reader.read16()
data3 = reader.read16()
data4 = reader.read64be()
guid_str = f"{data1:08x}-{data2:04x}-{data3:04x}-{data4:016x}"
tokens = [InstructionTextToken(InstructionTextTokenType.TextToken, " [EFI_GUID(\""),
InstructionTextToken(InstructionTextTokenType.StringToken, guid_str),
InstructionTextToken(InstructionTextTokenType.TextToken, "\")]")]
result.append(DisassemblyTextLine(tokens, addr))
return result
def __del__(self):
pass