《coredump问题原理探究》Linux x86版3.7节栈布局之返回值
2013-01-26 19:39
169 查看
虽然在x86里,返回值并不是通过栈来传递。但返回值也是调用约定的一个知识点。而且,对于函数来说,有入应该有出,入就是参数,出就是返回值。但返回值有什么特征呢?
看一下例子:
int funcA()
{
return 1;
}
int funcB()
{
return 2;
}
int main()
{
return funcA() + funcB();
}
看一下funcA和funcB的汇编:
可以看到,funcA函数除去函数开头特征指令和结尾指令之外,只有一条指令
也就是说,这条指令是由return1这句代码生成。由于返回值是1,从汇编看,是把返回值放入到eax寄存器里。
而funcB也是这样,只有一条指令:
是由代码生成的。
从上面可以看到,在x86中,返回值是通过eax寄存器来传递的。
PS:下一节将讲述如何定位“??”栈的方法,敬请期待
看一下例子:
int funcA()
{
return 1;
}
int funcB()
{
return 2;
}
int main()
{
return funcA() + funcB();
}
看一下funcA和funcB的汇编:
(gdb) disassemble funcA Dump of assembler code for function _Z5funcAv: 0x08048470 <+0>: push %ebp 0x08048471 <+1>: mov %esp,%ebp 0x08048473 <+3>: mov $0x1,%eax 0x08048478 <+8>: pop %ebp 0x08048479 <+9>: ret End of assembler dump.
(gdb) disassemble funcB Dump of assembler code for function _Z5funcBv: 0x0804847a <+0>: push %ebp 0x0804847b <+1>: mov %esp,%ebp 0x0804847d <+3>: mov $0x2,%eax 0x08048482 <+8>: pop %ebp 0x08048483 <+9>: ret End of assembler dump.
可以看到,funcA函数除去函数开头特征指令和结尾指令之外,只有一条指令
0x08048473 <+3>: mov $0x1,%eax
也就是说,这条指令是由return1这句代码生成。由于返回值是1,从汇编看,是把返回值放入到eax寄存器里。
而funcB也是这样,只有一条指令:
0x0804847d <+3>: mov $0x2,%eax
是由代码生成的。
从上面可以看到,在x86中,返回值是通过eax寄存器来传递的。
PS:下一节将讲述如何定位“??”栈的方法,敬请期待
相关文章推荐
- 《coredump问题原理探究》Linux x86版5.6节C风格数据结构内存布局之复合类型构成的结构体
- 《coredump问题原理探究》Linux x86版3.4节栈布局之函数参数
- 《coredump问题原理探究》Linux x86版5.6节C风格数据结构内存布局之复合类型构成的结构体
- 《coredump问题原理探究》Linux x86版5.4节C风格数据结构内存布局之数组coredump例子
- 《coredump问题原理探究》Linux x86版5.8节C风格数据结构内存布局之结构体数组结构体coredump
- 《coredump问题原理探究》Linux x86版3.4节栈布局之函数参数 .
- 《coredump问题原理探究》Linux x86版3.2节栈布局之函数桢
- 《coredump问题原理探究》Linux x86版3.3节栈布局之局部变量
- 《coredump问题原理探究》Linux x86版3.1节栈布局之概述
- 《coredump问题原理探究》Linux x86版6.3节有成员变量的类coredump例子
- 《coredump问题原理探究》Linux x86版6.2节C++风格数据结构内存布局之有成员变量的类
- 《coredump问题原理探究》Linux x86版5.1节C风格数据结构内存布局之引言
- 《coredump问题原理探究》Linux x86版3.8节栈布局之栈溢出coredump例子
- 《coredump问题原理探究》Linux x86版3.5节栈布局之-fomit-frame-pointer编译选项
- 《coredump问题原理探究》Linux x86版5.9节C风格数据结构内存布局之联合体
- 《coredump问题原理探究》Linux x86版5.2节C风格数据结构内存布局之基本数据类型
- 《coredump问题原理探究》Linux x86版5.7节C风格数据结构内存布局之结构体数组
- 《coredump问题原理探究》Linux x86版3.6节栈布局之gcc内嵌关键字
- 《coredump问题原理探究》Linux x86版5.5节C风格数据结构内存布局之基本数据类型构成的结构体
- 《coredump问题原理探究》Linux x86版6.4节虚函数