x86_64 调用约定
2012-08-22 22:48
344 查看
1.寄存器
2.函数调用约定
gcc默认情况下,参数是按照从右到左的顺序赋值或者压栈,对于整数运算来说,rdi,rsi,rdx,rcx,r8,r9保存先六个参数,其余参数通过栈进行传递。rax,rcx,rdx,rsi,rdi,r8-r11 都是临时的(对于caller来说,完成函数调用之后这些值可能会被改变),callee负责保存rbx,rsp,rbp,r12-r15 rax保存函数的返回值。
这个是32bit模式下的函数栈图,在64bit下将字节数由原来的4改成8字节即可。
2.函数调用约定
gcc默认情况下,参数是按照从右到左的顺序赋值或者压栈,对于整数运算来说,rdi,rsi,rdx,rcx,r8,r9保存先六个参数,其余参数通过栈进行传递。rax,rcx,rdx,rsi,rdi,r8-r11 都是临时的(对于caller来说,完成函数调用之后这些值可能会被改变),callee负责保存rbx,rsp,rbp,r12-r15 rax保存函数的返回值。
这个是32bit模式下的函数栈图,在64bit下将字节数由原来的4改成8字节即可。
相关文章推荐
- x86_64 函数调用约定
- X86和X86-64的函数栈帧结构以及调用约定
- Linux内核2.6.34.14添加系统调用及编译方法(CentOS-6.4-x86_64)
- 系统调用日志收集程序_x86_64环境3.14版本内核
- x86-64 下函数调用及栈帧原理
- 为x86 64体系结构添加系统调用
- 在Mac下使用QT调用OpenCV产生error: symbol(s) not found for architecture x86_64错误
- x86-64 下函数调用及栈帧原理
- Linux X86 系统调用列表 system call table 32 bits and 64 bits
- Xcode调用旧版本库出现Undefined symbols for architecture x86_64: ld: symbol(s) not found for architecture x86_64
- x86 常见调用约定(cdecl,fastcall,stdcall) & x86和ARM调用约定的栈帧分析 & ARM ATPCS(ARM-THUMB procedure call standard)
- linux X86-64 获取系统调用表
- x86-64 下函数调用及栈帧原理
- x86 x64下调用约定浅析
- x86_64架构下函数调用过程分析
- centos x86_64--------------------------------系统调用
- this kernel requires an x86-64 CPU, but only detected an i686 CPU. unable to boot - please ues a ke
- Oracle11gR2 RAC实时应用集群(2)在Windows2003 x86_64下的集群(ASM篇)
- 主要的调用约定关键字
- tess-two编译失败-----NDK build for target x86_64 results in error