xcode反汇编调试iOS模拟器程序(六)函数出入口处的处理与局部变量

引用第二节的例子:

xcode反汇编调试iOS模拟器程序(六)函数出入口处的处理与局部变量_第1张图片

函数的入口处,通常都是把esp的值传给ebp保存,然后下面的操作以ebp为基准做偏移量引用。因为esp作为栈指针,push和pop都会自动修改其值,所以用ebp可以不受影响。

还有的常见情形是开头和结尾对应着

subl $8, %esp
addl $8, %esp
这里体现着所谓的“局部变量在栈上分配”原则,说明本函数需要用8字节作为局部变量的保存空间。同时因为ebp已指向未subl前的esp地址,所以往下的操作中,-x($ebp)这样的地方是在操作局部变量,其中x为非负整数。不过需要明确的是,未必x字节是被用完作为局部变量的,编译器出于字节对齐的考虑,如果只用了7字节,那么也会分配到8字节。


嗯,这节很短,但对于理解代码很重要。

你可能感兴趣的:(局部变量,调试,反汇编,iOS模拟器程序)