Memory

Memory access is provided by the MemoryService class. Each debugger has its own instance, which can be used through its memory attribute.

Note

The following examples use the VM access class. This memory is always available. More information is available in glossary.pdf#TRACE32 Virtual Memory. Other access classes like AXI required to the debugger to be in prepare (SYStem.Mode Prepare) mode or in case of D (data) and P (program) attached (SYStem.Mode Attach / Up) to the target.

Reading / Writing custom buffers

>>> address = dbg.address.from_string('VM:0x0')
>>> buffer = b'\x12\x34\x56\x78'
>>> dbg.memory.write(address, buffer, length=len(buffer))
>>> read_buffer = dbg.memory.read(address, length=len(buffer))
>>> print("write buffer: {}".format(buffer))
>>> print("read buffer:  {}".format(read_buffer))

Reading / Writing 8-bit values

Signed

>>> import random
>>> address = dbg.address.from_string('VM:0x0')
>>> value = random.randint(-128, 127)
>>> dbg.memory.write_int8(address=address, value=value)
>>> print(value, dbg.memory.read_int8(address=address))

Unsigned

>>> import random
>>> address = dbg.address.from_string('VM:0x0')
>>> value = random.randint(0, 255)
>>> dbg.memory.write_uint8(address=address, value=value)
>>> print(value, dbg.memory.read_uint8(address=address))

Reading / Writing 16-bit values

Signed

>>> import random
>>> address = dbg.address.from_string('VM:0x0')
>>> value = random.randint(-32768, 32767)
>>> dbg.memory.write_int16(address=address, value=value)
>>> print(value, dbg.memory.read_int16(address=address))

Unsigned

>>> import random
>>> address = dbg.address.from_string('VM:0x0')
>>> value = random.randint(0, 65535)
>>> dbg.memory.write_uint16(address=address, value=value)
>>> print(value, dbg.memory.read_uint16(address=address))

Reading / Writing 32-bit values

Signed

>>> import random
>>> address = dbg.address.from_string('VM:0x0')
>>> value = random.randint(-2147483648, 2147483647)
>>> dbg.memory.write_int32(address=address, value=value)
>>> print(value, dbg.memory.read_int32(address=address))

Unsigned

>>> import random
>>> address = dbg.address.from_string('VM:0x0')
>>> value = random.randint(0, 4294967295)
>>> dbg.memory.write_uint32(address=address, value=value)
>>> print(value, dbg.memory.read_uint32(address=address))

Reading / Writing 64-bit values

Signed

>>> import random
>>> address = dbg.address.from_string('VM:0x0')
>>> value = random.randint(-9223372036854775808, 9223372036854775807)
>>> dbg.memory.write_int64(address=address, value=value)
>>> print(value, dbg.memory.read_int64(address=address))

Unsigned

>>> import random
>>> address = dbg.address.from_string('VM:0x0')
>>> value = random.randint(0, 18446744073709551615)
>>> dbg.memory.write_uint64(address=address, value=value)
>>> print(value, dbg.memory.read_uint64(address=address))