Gdb/Memory-Ports-in-Guile
Next: Iterators In Guile, Previous: I/O Ports in Guile, Up: Guile API [Contents][Index]
23.3.3.24 Memory Ports in Guile
GDB provides a port
interface to target memory.
This allows Guile code to read/write target memory using Guile’s port and
bytevector functionality. The main routine is open-memory
which
returns a port object. One can then read/write memory using that object.
- Scheme Procedure: open-memory [#:mode mode] [#:start address] [#:size size]
Return a port object that can be used for reading and writing memory. The port will be open according to
mode
, which is the standard mode argument to Guile port open routines, except that the ‘"a"
’ and ‘"l"
’ modes are not supported. See File Ports in GNU Guile Reference Manual. The ‘"b"
’ (binary) character may be present, but is ignored: memory ports are binary only. If ‘"0"
’ is appended then the port is marked as unbuffered. The default is ‘"r"
’, read-only and buffered.The chunk of memory that can be accessed can be bounded. If both
start
andsize
are unspecified, all of memory can be accessed. If onlystart
is specified, all of memory from that point on can be accessed. If onlysize
if specified, all memory in the range [0,size
) can be accessed. If both are specified, all memory in the rane [start
,start
+size
) can be accessed.
- Scheme Procedure
- memory-port?
- Return
#t
ifobject
is an object of type<gdb:memory-port>
. Otherwise return#f
.
- Scheme Procedure
- memory-port-range memory-port
- Return the range of
<gdb:memory-port>
memory-port
as a list of two elements:(start end)
. The range isstart
toend
inclusive.
- Scheme Procedure: memory-port-read-buffer-size memory-port
Return the size of the read buffer of
<gdb:memory-port>
memory-port
.This procedure is deprecated and will be removed in GDB 11. It returns 0 when using Guile 2.2 or later.
- Scheme Procedure: set-memory-port-read-buffer-size! memory-port size
Set the size of the read buffer of
<gdb:memory-port>
memory-port
tosize
. The result is unspecified.This procedure is deprecated and will be removed in GDB 11. When GDB is built with Guile 2.2 or later, you can call
setvbuf
instead (seesetvbuf
in GNU Guile Reference Manual).
- Scheme Procedure: memory-port-write-buffer-size memory-port
Return the size of the write buffer of
<gdb:memory-port>
memory-port
.This procedure is deprecated and will be removed in GDB 11. It returns 0 when GDB is built with Guile 2.2 or later.
- Scheme Procedure: set-memory-port-write-buffer-size! memory-port size
Set the size of the write buffer of
<gdb:memory-port>
memory-port
tosize
. The result is unspecified.This procedure is deprecated and will be removed in GDB 11. When GDB is built with Guile 2.2 or later, you can call
setvbuf
instead.
A memory port is closed like any other port, with close-port
.
Combined with Guile’s bytevectors
, memory ports provide a lot
of utility. For example, to fill a buffer of 10 integers in memory,
one can do something like the following.
;; In the program: int buffer[10]; (use-modules (rnrs bytevectors)) (use-modules (rnrs io ports)) (define addr (parse-and-eval "buffer")) (define n 10) (define byte-size (* n 4)) (define mem-port (open-memory #:mode "r+" #:start (value->integer addr) #:size byte-size)) (define byte-vec (make-bytevector byte-size)) (do ((i 0 (+ i 1))) ((>= i n)) (bytevector-s32-native-set! byte-vec (* i 4) (* i 42))) (put-bytevector mem-port byte-vec) (close-port mem-port)
Next: Iterators In Guile, Previous: I/O Ports in Guile, Up: Guile API [Contents][Index]