This is the mail archive of the
mailing list for the GDB project.
Re: value of local variable stored in register
- From: "Rohit Arul Raj" <rohitarulraj at gmail dot com>
- To: "Neeraj kushwaha" <kushneeraj at gmail dot com>
- Cc: gdb at sourceware dot org
- Date: Mon, 4 Feb 2008 10:58:15 +0530
- Subject: Re: value of local variable stored in register
- References: <firstname.lastname@example.org>
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.
On Feb 4, 2008 10:23 AM, Neeraj kushwaha <email@example.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
> int main()
> int *a=0;
> volatile register int b=0xabcd;
> register int c=20;
> 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
> 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.