c - Stack / base pointers in assembly -


i know topic has been covered ad nauseam here, , other places on internet - question simple 1 try head around assembly...

so if understand correctly ebp (base pointer) point top of stack, , esp (stack pointer) point bottom -- since stack grows downward. esp therefore points 'current location'. on function call, once you've saved ebp on stack insert new stack frame - function. in case of image below, if started n-3 go n-2 function call. when @ n-2 - ebp == 25 , esp == 24 (at least initially, before data placed on stack)?

is correct or off on tangent here?

thanks!

http://upload.wikimedia.org/wikipedia/en/a/a7/programcallstack2.png http://upload.wikimedia.org/wikipedia/en/a/a7/programcallstack2.png

this depends upon not hardware architecture , compiler, calling convention, agreed-upon way in functions work stack call 1 another. in other words, there different orders in function can push things onto stack, depending on compiler settings (and peculiar #pragma options, etc, etc).

it looks talking cdecl calling convention on x86 architecture. in case, caller's ebp pushed onto stack after return address. so, in example's n-2, location 25 contain pointer calling function n-3 (ie, contain address of instruction after call got n-2) , location 24 contain old ebp, , esp = 23 after call, before locals have been pushed onto stack. (except compilers make space on stack after call, , esp 20 instead of moving , down inside function n-2.)

however aware on x86 there particular optimization compiler can called frame pointer omission, avoids pushing old ebp onto stack altogether under conditions.


Comments

Popular posts from this blog

Delphi Wmi Query on a Remote Machine -