From: "Rohit Arul Raj" <rohitarulraj@gmail.com>
To: "Neeraj kushwaha" <kushneeraj@gmail.com>
Cc: gdb@sourceware.org
Subject: Re: value of local variable stored in register
Date: Mon, 04 Feb 2008 07:03:00 -0000 [thread overview]
Message-ID: <c356fd4e0802032302x17497663o7ba35ca50d08a04b@mail.gmail.com> (raw)
In-Reply-To: <df5e18bd0802032239y492d255asa247bd3f475a4cbd@mail.gmail.com>
Hi,
Then, the register value is getting corrupted due to the segmentation fault.
Try to set the break-point before the *a = 0 statement, and try to get
the register info and local variable info.
Regards,
Rohit
On Feb 4, 2008 12:09 PM, Neeraj kushwaha <kushneeraj@gmail.com> wrote:
>
> Hi Rohit,
>
> thanks for the reply.
>
> segmentation occurs due to unreferencing null pointer. (this was done
> intensionally)
> I am running gdb on core dump.
>
> My main intention to get the value of the local variable stored in register.
> From the dwarf dump information i can say it was stored in DW_OP_reg2.
>
> Also if for the arithmetic operations, data is moved to register from
> memory, but when the printf function returns all the saved register
> value should be restored.
>
> this is the dwarf information extracted from a.out
>
> <1>< 276> DW_TAG_subprogram
> DW_AT_sibling <341>
> DW_AT_external yes(1)
> DW_AT_name main
> DW_AT_decl_file 1
> /home/neeraj/SSG/Release2/gdblocal/2.c
> DW_AT_decl_line 5
> DW_AT_type <199>
> DW_AT_low_pc 0x80483a4
> DW_AT_high_pc 0x80483f5
> DW_AT_frame_base [
> 0]<lowpc=0x0><highpc=0x4>DW_OP_breg4+4
> [ 1]<lowpc=0x4><highpc=0xa>DW_OP_reg1
> [ 2]<lowpc=0xa><highpc=0xb>DW_OP_breg4+4
> [ 3]<lowpc=0xb><highpc=0xd>DW_OP_breg4+8
> [
> 4]<lowpc=0xd><highpc=0x51>DW_OP_breg5+8
> <2>< 305> DW_TAG_variable
> DW_AT_name a
> DW_AT_decl_file 1
> /home/neeraj/SSG/Release2/gdblocal/2.c
> DW_AT_decl_line 6
> DW_AT_type <341>
> DW_AT_location DW_OP_fbreg -16
> <2>< 317> DW_TAG_variable
> DW_AT_name b
> DW_AT_decl_file 1
> /home/neeraj/SSG/Release2/gdblocal/2.c
> DW_AT_decl_line 7
> DW_AT_type <347>
> DW_AT_location DW_OP_fbreg -20
> <2>< 329> DW_TAG_variable
> DW_AT_name c
> DW_AT_decl_file 1
> /home/neeraj/SSG/Release2/gdblocal/2.c
> DW_AT_decl_line 8
> DW_AT_type <199>
> DW_AT_location DW_OP_reg2
> <1>< 341> DW_TAG_pointer_type
> DW_AT_byte_size 4
> DW_AT_type <199>
> <1>< 347> DW_TAG_volatile_type
> DW_AT_type <199>
>
> Regards
> Neeraj
>
> On Feb 4, 2008 10:58 AM, Rohit Arul Raj <rohitarulraj@gmail.com> wrote:
>
> > 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
> > >
> >
>
next prev parent reply other threads:[~2008-02-04 7:03 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-04 4:53 Neeraj kushwaha
2008-02-04 5:28 ` Rohit Arul Raj
2008-02-04 6:39 ` Neeraj kushwaha
2008-02-04 7:03 ` Rohit Arul Raj [this message]
2008-02-04 7:42 ` Rohit Arul Raj
2008-02-04 20:32 ` Eli Zaretskii
2008-02-05 19:42 ` Jim Blandy
2008-02-05 20:35 ` Eli Zaretskii
2008-02-06 0:27 ` Jim Blandy
2008-02-06 4:18 ` Eli Zaretskii
2008-02-06 6:26 ` Jim Blandy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c356fd4e0802032302x17497663o7ba35ca50d08a04b@mail.gmail.com \
--to=rohitarulraj@gmail.com \
--cc=gdb@sourceware.org \
--cc=kushneeraj@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox