- 论坛徽章:
- 0
|
平台:Solaris(X86版)+gcc
fun1()
{
int i=1, m=2, n=3;
....
}
这里有三个局部变量i,m,n
对与gcc编译成机器码后,栈分配顺序一般是从左到右的顺序入栈
而反汇编的结果中局部变量赋值语句有:
movl $1,-4(%ebp) ; i=1
movl $2,-8(%ebp) ; m=2
movl $3,-0xc(%ebp) ; n=3
那么,i,m,n的栈中的位置如下图:
|----------------------------------|------> HIGH
| EIP (t函数的返回地址) |
|----------------------------------|
| EBP (函数的EBP) |
|----------------------------------|
| i (EBP-4) |
|----------------------------------|
| m (EBP- |
|----------------------------------|
| n (EBP-0xc) |
|----------------------------------|------> LOW
当然实际写或移植编译器时也可不安这个顺序,但为了调试的一致性,可考虑与gcc相近.
[ 本帖最后由 system888net 于 2008-4-25 12:22 编辑 ] |
|