函数:
-----------------
参数和返回值的传递方式:
1.寄存器
2.全局变量
3.堆栈
-----------------
声明函数:
.type func1, @function
func1:
...
ret
-----------------
C样式的参数和返回值传递方式:
参数传递使用堆栈
返回值传递:
eax-->32位结果
edx,eax-->64位整数
FPU的st(0)-->浮点值
---堆栈结构---
函数参数3 <--16(%ebp)
函数参数2 <--12(%ebp)
函数参数1 <--8(%ebp)
返回地址 <--4(%ebp)
旧的ebp值 <--(%ebp)
局部变量 <--(%esp)
---
function:
pushl %ebp
movl %esp,%ebp
subl $xxx,%esp
...
movl %ebp,%esp
popl %ebp
ret
---
enter代替函数开头
leave代替函数结尾
-------------------------------------------------
程序的内存布局:
+-------------+ <--0xbfffffff
+ 堆栈 +
+-------------+
+ +
+-------------+
+ 代码和数据+ #数据来自.bss和.data,此外此内存区域还包括链接所需的指令信息
+-------------+ <--0x08048000
程序启动时,以下四种信息会被放到堆栈里:
命令行参数(包括程序名称)的数目
从shell提示符执行的程序的名称
命令行中包含的任何命令行参数
在程序启动时的所有当前linux环境变量
-------------------------------------------------