On Wed, Dec 12, 2012 at 4:02 PM, Manavendra Nath Manav <mnm.kernel@gmail.com> wrote:
On Wed, Dec 12, 2012 at 3:56 PM, Fabio Pozzi <pozzi.fabio@gmail.com> wrote:
Why function arguments are stored from offset 12 of SP? Also notice values at offset 0 to 10 are always same, and value at offset 11 increases by 20 on each invocation of function foo().
You have to consider that local variables are allocated on the stack, thus both i, stackptr and sp are allocated on the stack, so if you print all the stack records you will find this variables, then the return pointer, the saved frame pointer (if saved) and then the function parameters. See http://en.wikipedia.org/wiki/Call_stack for a better explanation. If you want to access immediately to the function call parameters you should start from the frame pointer address (if there's one). To play with backtraces you may find useful the backtrace function[1] and libraries like libunwind[2] which take care of this details for you.
[1] http://tdistler.com/2008/11/15/how-to-print-a-stack-backtrace-programaticall... [2] http://www.nongnu.org/libunwind/
-- Saluti, Fabio Pozzi
Thanks Fabio, You solved a lot of doubts for me. How to get the frame pointer address?
I found that gcc has in-build function to retrieve frame pointer address void * __builtin_frame_address (unsigned int level) When i call print values at offsets starting from __builtin_frame_address (0) the function arguments start from offset 2. How can I confirm that this behavior is always consistent. -- Manavendra Nath Manav