zoukankan      html  css  js  c++  java
  • stdcall和cdecl

    红色部分为不同之处。代码编译  在x86_64的机器上  选择了32位模式 gcc -S 1.c -m32

     默认cdecl

    int add(int a,int b,int c){

     int sum = a+b+c;
     return sum;
    };

    int main(void){
     int c=add(1,2,3);
    }

    add:

    pushl %ebp
     movl %esp, %ebp
     subl $16, %esp
     movl 8(%ebp), %edx
     movl 12(%ebp), %eax
     addl %eax, %edx
     movl 16(%ebp), %eax
     addl %edx, %eax
     movl %eax, -4(%ebp)
     movl -4(%ebp), %eax
     leave
     ret
    main:
     pushl %ebp
     movl %esp, %ebp
     subl $16, %esp
     pushl $3
     pushl $2
     pushl $1
     call add
     addl $12, %esp
     movl %eax, -4(%ebp)
     movl $0, %eax
     leave
     ret

    stdcall:

    int __attribute__((__stdcall__)) add(int a,int b,int c){
     int sum = a+b+c;
     return sum;
    };

    int main(void){
     int c=add(1,2,3);
    }

    add:
     pushl %ebp
     movl %esp, %ebp
     subl $16, %esp
     movl 8(%ebp), %edx
     movl 12(%ebp), %eax
     addl %eax, %edx
     movl 16(%ebp), %eax
     addl %edx, %eax
     movl %eax, -4(%ebp)
     movl -4(%ebp), %eax
     leave
     ret $12
    main:
     pushl %ebp
     movl %esp, %ebp
     subl $16, %esp
     pushl $3
     pushl $2
     pushl $1
     call add
     movl %eax, -4(%ebp)
     movl $0, %eax
     leave
     ret

    作者:严彦彪 原创作品转载请注明出处
  • 相关阅读:
    vim实用技巧总结
    configure, make, make install都做了什么
    替换ubuntu 14.04的源
    从源码Build vim以及打包.deb
    Vimperator技巧
    搭建Gitlab
    [转] 你真的会写单例模式吗——Java实现
    笔记本开临时Wifi
    Ubuntu 12.04 修改键盘映射
    oracle查看用户所在的表空间
  • 原文地址:https://www.cnblogs.com/yanbiao/p/8027409.html
Copyright © 2011-2022 走看看