Exemple #1
0
    def module_info(self):
        procs = self.prep_debug_monitor_and_inferior()
        self.add_process_info_collection_packets()
        context = self.expect_gdbremote_sequence()
        info = self.parse_process_info_response(context)

        self.test_sequence.add_log_lines([
            'read packet: $jModulesInfo:%s]#00' % json.dumps([{
                "file":
                lldbutil.append_to_process_working_directory(self, "a.out"),
                "triple":
                seven.unhexlify(info["triple"])
            }]),
            {
                "direction": "send",
                "regex": r'^\$\[{(.*)}\]\]#[0-9A-Fa-f]{2}',
                "capture": {
                    1: "spec"
                }
            },
        ], True)

        context = self.expect_gdbremote_sequence()
        spec = context.get("spec")
        self.assertRegexpMatches(spec, '"file_path":".*"')
        self.assertRegexpMatches(spec, '"file_offset":\d+')
        self.assertRegexpMatches(spec, '"file_size":\d+')
        self.assertRegexpMatches(spec, '"triple":"\w*-\w*-.*"')
        self.assertRegexpMatches(spec, '"uuid":"[A-Fa-f0-9]+"')
def _handle_output_packet_string(packet_contents):
    if (not packet_contents) or (len(packet_contents) < 1):
        return None
    elif packet_contents[0] != "O":
        return None
    elif packet_contents == "OK":
        return None
    else:
        return seven.unhexlify(packet_contents[1:])
def _handle_output_packet_string(packet_contents):
    if (not packet_contents) or (len(packet_contents) < 1):
        return None
    elif packet_contents[0] != "O":
        return None
    elif packet_contents == "OK":
        return None
    else:
        return seven.unhexlify(packet_contents[1:])
Exemple #4
0
    def test_m_packet_reads_memory(self):
        self.build()
        self.set_inferior_startup_launch()
        # This is the memory we will write into the inferior and then ensure we
        # can read back with $m.
        MEMORY_CONTENTS = "Test contents 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz"

        # Start up the inferior.
        procs = self.prep_debug_monitor_and_inferior(
            inferior_args=[
                "set-message:%s" %
                MEMORY_CONTENTS,
                "get-data-address-hex:g_message",
                "sleep:5"])

        # Run the process
        self.test_sequence.add_log_lines(
            [
                # Start running after initial stop.
                "read packet: $c#63",
                # Match output line that prints the memory address of the message buffer within the inferior.
                # Note we require launch-only testing so we can get inferior otuput.
                {"type": "output_match", "regex": self.maybe_strict_output_regex(r"data address: 0x([0-9a-fA-F]+)\r\n"),
                 "capture": {1: "message_address"}},
                # Now stop the inferior.
                "read packet: {}".format(chr(3)),
                # And wait for the stop notification.
                {"direction": "send", "regex": r"^\$T([0-9a-fA-F]{2})thread:([0-9a-fA-F]+);", "capture": {1: "stop_signo", 2: "stop_thread_id"}}],
            True)

        # Run the packet stream.
        context = self.expect_gdbremote_sequence()
        self.assertIsNotNone(context)

        # Grab the message address.
        self.assertIsNotNone(context.get("message_address"))
        message_address = int(context.get("message_address"), 16)

        # Grab contents from the inferior.
        self.reset_test_sequence()
        self.test_sequence.add_log_lines(
            ["read packet: $m{0:x},{1:x}#00".format(message_address, len(MEMORY_CONTENTS)),
             {"direction": "send", "regex": r"^\$(.+)#[0-9a-fA-F]{2}$", "capture": {1: "read_contents"}}],
            True)

        # Run the packet stream.
        context = self.expect_gdbremote_sequence()
        self.assertIsNotNone(context)

        # Ensure what we read from inferior memory is what we wrote.
        self.assertIsNotNone(context.get("read_contents"))
        read_contents = seven.unhexlify(context.get("read_contents"))
        self.assertEqual(read_contents, MEMORY_CONTENTS)