From 74e6f786752e2cb924382e8957d381da86eeaa62 Mon Sep 17 00:00:00 2001 From: anon Date: Sun, 27 Aug 2023 15:24:45 +0200 Subject: [PATCH] gdb regex_t pretty printer because vector_t was a footgun --- debug/regex.pretty_print.py | 54 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 debug/regex.pretty_print.py diff --git a/debug/regex.pretty_print.py b/debug/regex.pretty_print.py new file mode 100644 index 0000000..86ac1b0 --- /dev/null +++ b/debug/regex.pretty_print.py @@ -0,0 +1,54 @@ +class RegexPrinter: + def __init__(self, val): + self.val = val + def to_string(self): + # Init + s = "{" + # Regular shit + s += "accepting_state = " + str(self.val['accepting_state']) + ", str = " + str(self.val['str']) + ",\n" + # Delta + delta_t_ptr_ptr = gdb.lookup_type("delta_t").pointer().pointer() + dt = self.val['delta_table'] + s += "delta_table = {\n" + for i in range(0, dt['element_count']): + s += "\t" + s += ( + str( + ( + dt['data'].cast(delta_t_ptr_ptr) + + + i + ).dereference().dereference() + ) + ) + s += ",\n" + s = s[:-2] + s += "\n },\n" + # Offshoot + offshoot_t_ptr_ptr = gdb.lookup_type("offshoot_t").pointer().pointer() + dt = self.val['delta_table'] + s += "offshoot_table = {\n" + for i in range(0, dt['element_count']): + s += "\t" + s += ( + str( + ( + dt['data'].cast(offshoot_t_ptr_ptr) + + + i + ).dereference().dereference() + ) + ) + s += ",\n" + s = s[:-2] + s += "\n }\n" + # Closour + s += "}" + return s + +def regex_lookup(val): + if str(val.type) == 'regex_t' or str(val.type) == 'const regex_t': + return RegexPrinter(val) + return None + +gdb.pretty_printers.append(regex_lookup)