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: value of local variable stored in register


Hi,

1. You are getting segmentation fault because of trying to write to a
invalid memory location (0x0) through pointer a;
2. It is not always true that if u give the storage class specifier as
"Register", a register will be allocated for the local variable. It
always depends on the compiler.
3. It is possible that for arithmetic operations, the compiler may
move your data to register from memory (operation: b*c & your
arithmetic operations does not support memory operands). In that case
u can look at the assembly generated.

Regards,
Rohit

On Feb 4, 2008 10:23 AM, Neeraj kushwaha <kushneeraj@gmail.com> wrote:
> Hi All,
>
> I am trying to find the value of local variable stored in register.
> But I am getting wrong value from gdb.
> Here what i am trying
>
> #include<stdio.h>
>
> int main()
> {
> int *a=0;
> volatile register int b=0xabcd;
>  register int c=20;
> printf("%x\n",b*c);
> *a=0;
> return 0;
> }
>
>
> ------------------------------
> -----------------------
> GDB info:
>
> Core was generated by `./a.out'.
> Program terminated with signal 11, Segmentation fault.
>  #0  0x080483e1 in main () at 1.c:9
> 9       *a=0;
> (gdb) info local
> a = (int *) 0x0
> b = 43981
> c = 11305136
> (gdb) info reg
> eax            0x0      0
> ecx            0x0      0
> edx            0xac80b0 11305136
>  ebx            0xac6ff4 11300852
> esp            0xbfc65a00       0xbfc65a00
> ebp            0xbfc65a28       0xbfc65a28
> esi            0x973ca0 9911456
> edi            0x0      0
> eip            0x80483e1        0x80483e1 <main+61>
>  eflags         0x210282 [ SF IF RF ID ]
> cs             0x73     115
> ss             0x7b     123
> ds             0x7b     123
> es             0x7b     123
> fs             0x0      0
> gs             0x33     51
>  (gdb)
>
>
> The value of local variable is shown as c = 11305136, but actual value is 20.
>
> How to get the correct value of variables which are stored in register.
>
> Regards
> Neeraj
>


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