• linux---asmlinkage


    看一下/usr/include/asm/linkage.h里面的定义:
    #define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))
    __attribute__是关键字,是gcc的C语言扩展,regparm(0)表示不从寄存器传递参数

    如果是__attribute__((regparm(3))),那么调用函数的时候参数不是通过栈传递,而是直接放到寄存器里,被调用函数直接从寄存器取参数

    还有一种是:

    #define fastcall __attribute__((regparm(3))) 
    #define asmlinkage __attribute__((regparm(0))) 
    函数定义前加宏asmlinkage ,表示这些函数通过堆栈而不是通过寄存器传递参数。 
    gcc编译器在汇编过程中调用c语言函数时传递参数有两种方法:一种是通过堆栈,另一种是通过寄存器缺省时采用寄存器,假如你要在你的汇编过程中调用c语言函数,并且想通过堆栈传递参数,你定义的c函数时要在函数前加上宏asmlinkage

    Coding
  • 相关阅读:
    shutil模块详解
    pycharm连接服务器
    python中__name__属性的使用
    ORM学习笔记
    ORM连表操作
    python操作mysql实例
    python登录项目
    pycharm建立第一个django工程-----windows中
    打印顺序
    shell脚本
  • 原文地址:https://www.cnblogs.com/ccie-leon-43093/p/5944558.html
Copyright © 2020-2023  润新知