56 lines · python
1import lldb2from lldbsuite.support import seven3from lldbsuite.test.lldbtest import *4from lldbsuite.test.decorators import *5from lldbsuite.test.gdbclientutils import *6from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase7 8 9class TestReadMemory(GDBRemoteTestBase):10 def test_x_with_prefix(self):11 class MyResponder(MockGDBServerResponder):12 def qSupported(self, client_features):13 # binary-upload+ indicates we use the gdb style of x packets14 return super().qSupported(client_features) + ";binary-upload+"15 16 def x(self, addr, length):17 return "bfoobar" if addr == 0x1000 else "E01"18 19 self.server.responder = MyResponder()20 target = self.dbg.CreateTargetWithFileAndTargetTriple("", "x86_64-pc-linux")21 process = self.connect(target)22 23 error = lldb.SBError()24 self.assertEqual(b"foobar", process.ReadMemory(0x1000, 10, error))25 26 def test_x_bare(self):27 class MyResponder(MockGDBServerResponder):28 def x(self, addr, length):29 # The OK response indicates we use the old lldb style.30 if addr == 0 and length == 0:31 return "OK"32 return "foobar" if addr == 0x1000 else "E01"33 34 self.server.responder = MyResponder()35 target = self.dbg.CreateTargetWithFileAndTargetTriple("", "x86_64-pc-linux")36 process = self.connect(target)37 38 error = lldb.SBError()39 self.assertEqual(b"foobar", process.ReadMemory(0x1000, 10, error))40 41 def test_m_fallback(self):42 class MyResponder(MockGDBServerResponder):43 def x(self, addr, length):44 # If `x` is unsupported, we should fall back to `m`.45 return ""46 47 def readMemory(self, addr, length):48 return seven.hexlify("foobar") if addr == 0x1000 else "E01"49 50 self.server.responder = MyResponder()51 target = self.dbg.CreateTargetWithFileAndTargetTriple("", "x86_64-pc-linux")52 process = self.connect(target)53 54 error = lldb.SBError()55 self.assertEqual(b"foobar", process.ReadMemory(0x1000, 10, error))56