We have mentioned already that files are not the only entities that
can be edited using poke. Remember the dot-command .file
that opened a file as an IO space?
(poke) .file foo.o The current IOS is now `./foo.o'. (poke) .info ios Id Type Mode Bias Size Name * #0 FILE rw 0x00000000#B 0x000004c8#B ./foo.o
Memory buffers can be created using a similar dot-command,
.mem
:
(poke) .mem foo The current IOS is now `*foo*'. (poke) .info ios Id Type Mode Bias Size Name * #1 MEMORY 0x00000000#B 0x00001000#B *foo* #0 FILE rw 0x00000000#B 0x000004c8#B ./foo.o
Note how the name of the buffer is built by prepending and appending
asterisks. Therefore, the name of the buffer created by the command
.mem foo
is *foo*
. Note also that the new buffer is
created with a default size of 0x1000 bytes, or 4096 bytes. The
contents of the buffer are zeroed:
(poke) dump 76543210 0011 2233 4455 6677 8899 aabb ccdd eeff 0123456789ABCDEF 00000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000060: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
Memory buffer IO spaces grow automatically when a value is mapped beyond their current size. This is very useful when populating newly created buffers. However, for security reasons, there is a limit: the IO spaces are only allow to grow 4096 bytes at a time.
When it comes to map values, there is absolutely no difference between an IO space backed by a file and an IO space backed by a memory buffer. Exactly the same rules apply in both cases.