Example #1
0
 def test_set_pid(self):
     # Debug the running Python interpreter itself.
     prog = Program()
     self.assertEqual(prog.arch, Architecture.AUTO)
     prog.set_pid(os.getpid())
     self.assertEqual(prog.arch, Architecture.HOST)
     data = b'hello, world!'
     buf = ctypes.create_string_buffer(data)
     self.assertEqual(prog.read(ctypes.addressof(buf), len(data)), data)
     self.assertRaisesRegex(ValueError,
                            'program memory was already initialized',
                            prog.set_pid, os.getpid())
Example #2
0
 def test_set_pid(self):
     # Debug the running Python interpreter itself.
     prog = Program()
     self.assertIsNone(prog.platform)
     self.assertFalse(prog.flags & ProgramFlags.IS_LIVE)
     prog.set_pid(os.getpid())
     self.assertEqual(prog.platform, host_platform)
     self.assertTrue(prog.flags & ProgramFlags.IS_LIVE)
     self.assertRaisesRegex(
         ValueError,
         "program memory was already initialized",
         prog.set_pid,
         os.getpid(),
     )
Example #3
0
 def test_set_pid(self):
     # Debug the running Python interpreter itself.
     prog = Program()
     self.assertIsNone(prog.platform)
     self.assertFalse(prog.flags & ProgramFlags.IS_LIVE)
     prog.set_pid(os.getpid())
     self.assertEqual(prog.platform, host_platform)
     self.assertTrue(prog.flags & ProgramFlags.IS_LIVE)
     data = b'hello, world!'
     buf = ctypes.create_string_buffer(data)
     self.assertEqual(prog.read(ctypes.addressof(buf), len(data)), data)
     self.assertRaisesRegex(ValueError,
                            'program memory was already initialized',
                            prog.set_pid, os.getpid())
Example #4
0
    def test_pid_memory(self):
        data = b"hello, world!"
        buf = ctypes.create_string_buffer(data)
        address = ctypes.addressof(buf)

        # QEMU user-mode emulation doesn't seem to emulate /proc/$pid/mem
        # correctly on a 64-bit host with a 32-bit guest; see
        # https://gitlab.com/qemu-project/qemu/-/issues/698. Packit uses mock
        # to cross-compile and test packages, which in turn uses QEMU user-mode
        # emulation. Skip this test if /proc/$pid/mem doesn't work so that
        # those builds succeed.
        try:
            with open("/proc/self/mem", "rb") as f:
                f.seek(address)
                functional_proc_pid_mem = f.read(len(data)) == data
        except OSError:
            functional_proc_pid_mem = False
        if not functional_proc_pid_mem:
            self.skipTest("/proc/$pid/mem is not functional")

        prog = Program()
        prog.set_pid(os.getpid())

        self.assertEqual(prog.read(ctypes.addressof(buf), len(data)), data)