From 2f24b0df0d444a470637bb0dfe64c9e89f2d2f23 Mon Sep 17 00:00:00 2001 From: pompolic <pompolic@special-circumstanc.es> Date: Mon, 6 Sep 2021 18:42:29 +0200 Subject: [PATCH] Remove string typing from HParserEnv and IgnoreSeqEnv --- gdb-port/parser-type-instrumentation-gdb.py | 22 +++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/gdb-port/parser-type-instrumentation-gdb.py b/gdb-port/parser-type-instrumentation-gdb.py index 2bc1fad..0ed97e5 100644 --- a/gdb-port/parser-type-instrumentation-gdb.py +++ b/gdb-port/parser-type-instrumentation-gdb.py @@ -70,8 +70,14 @@ class HParserEnv: # or: # p_env = gdb.parse_and_eval("parser").dereference()['env'] + hparser_t = gdb.lookup_type("HParser") + hparser_p_t = hparser_t.pointer() - vtable_p = gdb.parse_and_eval("((HParser*) " + str(parser_addr) + ")->vtable") + # Construct a gdb.Value around the address we were given, and cast it to a HParser* + parser_addr_val = gdb.Value(parser_addr) + parser_p = parser_addr_val.cast(hparser_p_t) + + vtable_p = parser_p.dereference()['vtable'] try: name = parser_name_defaults[self.top_level_parse.vt_types.lookup_by_address(vtable_p).name] # if lookup_by_address() returns None @@ -313,14 +319,22 @@ class IgnoreSeqEnv(HParserEnv): self.parser = parser self.member_parsers = [] + h_ignoreseq_t = gdb.lookup_type("HIgnoreSeq") + h_ignoreseq_p_t = h_ignoreseq_t.pointer() + + parser_obj = gdb.parse_and_eval("*parser") + p_env = parser_obj['env'].cast(h_ignoreseq_p_t).dereference() ignoreseq_p = gdb.parse_and_eval("(HIgnoreSeq*) parser->env") - seq_len = gdb.parse_and_eval("((HIgnoreSeq*) parser->env)->len") - which = gdb.parse_and_eval("((HIgnoreSeq*) parser->env)->which") + #seq_len = gdb.parse_and_eval("((HIgnoreSeq*) parser->env)->len") + seq_len = p_env['len'] + #which = gdb.parse_and_eval("((HIgnoreSeq*) parser->env)->which") + which = p_env['which'] self.which = int(which) + parsers = p_env['parsers'] super().__init__(parser, top_level_parse) for index in range(0, seq_len): - parser_p = gdb.parse_and_eval("((HIgnoreSeq*) parser->env)->parsers[" + str(index) + "]") + parser_p = parsers[index] parser_obj = top_level_parse.add_or_get_parser(parser_p) # TODO: name parsers on add? # TODO: move updates to parsers to TopLevelParse? -- GitLab