Doubt using "set" command with registers

joaoandreferro@sapo.pt joaoandreferro@sapo.pt
Fri Oct 31 11:21:00 GMT 2014


Citando Pedro Alves <palves@redhat.com>:

> Hi João,
>
> On 10/28/2014 04:01 PM, joaoandreferro@sapo.pt wrote:
>> Hello all,
>>
>> I've been using GDB (in fact, conjuged with KGDB) lately to do some
>> kernel debugging. I've been testing some GDB commands, and a doubt
>> arised while using the "set" command, trying to change the value of
>> some registers. I've been able to successfully change the value of all
>> the registers provided by the "info registers" command (i. e., in my
>> case $eax, $ecx, $edx, $ebx, $esp, $ebp, $esi, $edi, $eip, $eflags,
>> $cs, $ss, $ds, $es, $fs and $gs) *except* for $esp, $ss, $fs and $gs.
>> Why is it so? I've been making these tests after hitting a hardware
>> breakpoint, then I set the values with e. g. "set $es = 0xf1c2007c",
>> and verifiy the assignemt with "info reg $es". As I've pointed out, it
>> works with the majority of the registers, except for that four (in
>> this particular case, the first command doesn't output any error, but
>> the second command shows me that the registers remain with the initial
>> value). By the way, I've started GDB with the -write option (checked
>> it inside GDb with the "show write" command). My GDB version is 7.2.
>>
>> If someone knows something about this situation and can share it with
>> me, it would be great.
>
> I'd guess that it's kgdb itself that is blocking those writes.
>
> Try "set debug remote 1" before the "set $foo = " command.
>
> Thanks,
> Pedro Alves

Hello Pedro,

Thanks for your answer. I turned "set debug remote 1" on again, and  
strangely, the output tells me that "set-register" is not supported,  
but only when I'm able to change the register value (see the output  
below). First, I've tried with a register which I can successfully  
change the value, and then with another one where I wasn't able to do  
it in the past. Do you know why this behaviour occurs? Meanwhile, I'll  
ask the same in the KGDB mailing list. Like I've mentioned, output  
below:

(gdb) info reg $es
es             0x7b	123
(gdb) set $es = 0x7c
Sending packet: $Pd=7c000000#ab...Ack
Packet received:
Packet P (set-register) is NOT supported
Sending packet:  
$G14000000ccb59cc00000000067000000089fcbf10c9fcbf1ac309dc00000000079154ac09600000060000000680000007b009dc07c000000ffff0000ffff0000#61...Ack
Packet received: OK
Sending packet: $g#67...Ack
Packet received:  
14000000ccb59cc00000000067000000089fcbf10c9fcbf1ac309dc00000000079154ac09600000060000000680000007b009dc07c000000ffff0000ffff0000
(gdb) info reg $es
es             0x7c	124
(gdb) info reg $ss
ss             0x68	104
(gdb) set $ss = 0x69
Sending packet:  
$G14000000ccb59cc00000000067000000089fcbf10c9fcbf1ac309dc00000000079154ac09600000060000000690000007b009dc07c000000ffff0000ffff0000#62...Ack
Packet received: OK
Sending packet: $g#67...Ack
Packet received:  
14000000ccb59cc00000000067000000089fcbf10c9fcbf1ac309dc00000000079154ac09600000060000000680000007b009dc07c000000ffff0000ffff0000
(gdb) info reg $ss
ss             0x68	104

Best regards,
João



More information about the Gdb mailing list