This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Manipulating memory


Here is an example: (if and if only the memory can be accessed by your CPU directly).

char mac[20]; (a memory on stack)

(gdb) p mac
$23 = "\0050:1b:21:01:b2:71\000\000"
(gdb) p /x mac
$24 = {0x5, 0x30, 0x3a, 0x31, 0x62, 0x3a, 0x32, 0x31, 0x3a, 0x30, 0x31, 0x3a,
0x62, 0x32, 0x3a, 0x37, 0x31, 0x0, 0x0, 0x0}
(gdb) p &mac
$25 = (char (*)[20]) 0x7fbfffe940
(gdb) p *((char*) 0x7fbfffe940)
$26 = 5 '\005'
(gdb) set *((char*) 0x7fbfffe940)=208
(gdb) p *((char*) 0x7fbfffe940)
$27 = -48 ''
(gdb) set *((char*) 0x7fbfffe940)=11
(gdb) p *((char*) 0x7fbfffe940)
$28 = 11 '\v'



Note: For some CPUs, some memories can only be only accessed with word-aligned (addr%4==0) addresses.
If you try to cast a random memory address to a (char*), it may not work (or crash!).


Sheng-Liang Song

Joel Brobecker wrote:
I have read the GDB manual, and I could not find a way to manipulate a
memory, for example: set values at given address. I only found a way
to view it using '-data-read-memory' command,
is this true or did I miss something?

To view memory at a given address, I usually use the "x" command. To write memory, I use "set {TYPE}ADDRESS := VALUE" (or something like that, I'm completely jetlagged right now). For instance, to set a byte at 0xdeadbeef to 0x48, I would do:

(gdb) set {char} 0xdeadbeef = 0x48

(This assume that the current language is C)



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]