美文网首页
x86 调用约定

x86 调用约定

作者: devilisdevil | 来源:发表于2020-08-15 14:04 被阅读0次

调用约定主要规定参数传递顺序,传递方式(栈还是寄存器),调用者/被调用函数需要保留的寄存器(caller-saved registers or volatile registers / callee-saved registers or non-volatile registers)以及栈的使用与恢复(caller与callee谁负责平栈)

linux中常用的调用约定就两种,32位下cdecl,64位下SysV,stack cleanup 都是caller负责

cdecl

(c declaration)

32位下,函数参数从右往左依次被push到栈上

Registers EAX, ECX, and EDX are caller-saved, and the rest are callee-saved.

SysV

64位下,参数依次由RDI,RSI,RDX,RCX,R8,R9寄存器传递,如果还有更多参数,则和cdecl一样,从右往左把剩余参数压栈

Registers RBX, RBP, and R12–R15 are callee saved, all other registers are caller saved

其他约定

其他调用约定参考wiki: x86 calling conventions

参考

相关文章

  • x86 调用约定

    调用约定主要规定参数传递顺序,传递方式(栈还是寄存器),调用者/被调用函数需要保留的寄存器(caller-save...

  • C语言10- C语言与汇编

    20:C语言与汇编 20.1:调用约定之汇编 x86调用约定: cdecl:参数从右往左依次入栈,调用者栈平衡(C...

  • 64位逆向分析

    函数 约定调用 x86的函数调用有多种,但是x64只有一种寄存器快速调用约定。前4个参数使用寄存器传递,如果参数超...

  • c语言调用栈

    关键词:C语言 、X86汇编、调用栈、传参顺序、C调用约定 工具:C 编译器、IDA 测试代码1: stack.c...

  • selenium Python>>>调用浏览器

    调用Chrome "C:\Program Files (x86)\Google\Chrome\Applicatio...

  • 调用约定

    调用约定 调用约定参数压栈顺序平衡堆栈EAXAXAH - ALECXCXCH-CLEDXDXDH-DLEBXBXB...

  • 调用约定

    对于常见的指令集,在指令层面没有所谓的“函数”概念,只有“子程序”概念。子程序是存储在“主程序”之外的一段指令。子...

  • 11-27函数

    函数 函数的重点是识别调用约定、参数类型和返回值类型 调用约定: cdecl调用方平栈 stdcall被调用方平栈...

  • 函数调用约定

    援引《C++ Primer(Fifth Edition)》4.1.3节: Order of operand eva...

  • 函数调用约定

    函数调用约定 在C语言中,假设我们有这样的一个函数: int function(int a,int b) 调用时只...

网友评论

      本文标题:x86 调用约定

      本文链接:https://www.haomeiwen.com/subject/oysodktx.html