Linux汇编与C互相调用
2015-07-16 11:44
603 查看
一、简介
C语言调用汇编有两种方式:1、通过内嵌汇编 2、通过编译链接。
二、基础知识
对于C和汇编语言的接口主要有两个问题需要解决
1、调用者与被调用者的参数传递
对于第一种:
对于第二种:
2、说明和建立调用者与被调用者间的联系
参考:
C语言调用汇编有两种方式:1、通过内嵌汇编 2、通过编译链接。
二、基础知识
对于C和汇编语言的接口主要有两个问题需要解决
1、调用者与被调用者的参数传递
正常的,定义一个函数总是希望它完成某些功能,一个毫无用处的函数将毫无意义。这些功能有常常是更大的功能的一部分,而函数完成这些功能或多或少都要与外界联系(一个完全不与外界联系的函数也是一个毫无意义的函数)(延时函数也要消耗时间,时间也属于外界的一种资源),比如要传递一些数据给其处理,处理过后返回处理的结果。这种数据的传递可以形象的通过两种方式来实现,第一种是外界直接把数据给函数,第二种是函数自己去外界取数据。
对于第一种:
这种数据传递通过堆栈完成,是一种隐性方式,隐含操作是:在执行调用时从调用程序参数表中的最后一个参数开始 ,自动依次压入堆栈;将所有参数压入堆栈后,再自动将被调用程序执行结束后的返回地址 (断点)压入堆栈,以使被调程序结束后能返回主调程序的正确位置而继续执行。
对于第二种:
对于第二种模型,必须开辟一个公共的区域,调用者及被调用者都必须能访问此区域。
2、说明和建立调用者与被调用者间的联系
为了建立调用与被调用模块间的连接关系,被调用的汇编程序应用global,说明其可被外部模块调用;而调用程序则应预先说明要引用的外部模块名。
参考:
http://blog.chinaunix.net/uid-20797642-id-2495231.html http://www.cnblogs.com/shenlian/archive/2011/05/17/2049441.html[/code]
三、实例
1、32位:Linux汇编与C互相调用http://www.linuxidc.com/Linux/2012-07/65757.htm
2、内嵌汇编
内嵌汇编格式asm ( assembler template : output operands (optional) : input operands (optional) : clobbered registers list (optional) );http://blog.csdn.net/scotthuang1989/article/details/39497903http://blog.chinaunix.net/uid-25436678-id-3076218.htmlhttp://blog.chinaunix.net/uid-9185047-id-465761.html
四、常见问题
1、如下Linux AT&T汇编错误:Error: invalid instruction suffix for `push'
解决方法:http://www.2cto.com/os/201310/253276.html
相关文章推荐
- 小白有问题-下雨天给linux装adobe flash player更配
- Linux下的IPC-命名管道的使用
- CENTOS7阿里云LAMP环境搭建
- Linux系统调用的实现机制分析
- [Zedboard u-boot Linux系统移植]-Embedded Linux® Hands-on Tutorial for the ZedBoard™
- 每天进步一点点——Linux磁盘管理LVM与RAID
- 多台linux 知道公网IP 内网IP 如何向某台机器上放文件
- linux下升级gcc的方法 – 亲测可用
- Linux下ftp自动登录
- linux 终端快速移动命令和历史命令
- 实例解说Linux中fdisk分区使用方法
- linux不使用文件名扩展识别文件类…
- linux卸载php
- 12款最佳Linux命令行终端工具
- Linux内核模块的编译基础知识
- linux select 学习
- 自学基础_linux_5_环境变量配置
- linux下OpenFire配置安装与配置
- linux设备驱动makefile入门解析
- linux批量重命名之xargs