Find out function arguments value from stack pointer

Manavendra Nath Manav mnm.kernel at gmail.com
Wed Dec 12 05:44:12 EST 2012


On Wed, Dec 12, 2012 at 4:02 PM, Manavendra Nath Manav
<mnm.kernel at gmail.com> wrote:
> On Wed, Dec 12, 2012 at 3:56 PM, Fabio Pozzi <pozzi.fabio at 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-programatically-in-linux
>> [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



More information about the Kernelnewbies mailing list