AT&T汇编语言(第五章 USING SYSTEMCALL AND C LIBRARY)

本文详细介绍了32位和64位系统下的系统调用差异,包括32位中系统调用参数的存放方式、64位下使用新的系统调用指令和寄存器布局。还探讨了64位环境下标准库函数的实现,如参数传递和返回值处理。同时,文章提到了文件描述符在系统调用中的作用,以及默认的输入输出设置。
摘要由CSDN通过智能技术生成

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、32-BITS, SYSCALL

不同操作系统的系统调用不通用。Linux/Unix都遵循POSIX接口标准,基本上都可以通用。但是32位的系统调用和64位系统调用不一样。
在这里插入图片描述
系统调用id可以查询手册,或者unistd_32.h/unistd_64.h
系统函数的参数,从左至右,依次放在EBX、ECX、EDX、ESI、EDX中,超过5个参数用其他方法传递。
系统函数的返回值存放在EAX中
int $80 # 软中断,调用系统函数
用echo $? 可以查询函数返回值
在这里插入图片描述

二、64-BITS,SYSCALL

在这里插入图片描述
64位和32位的系统调用编号完全不同,参数使用的寄存器也不同。
同时,64位的汇编可以通过syscall指令,而不是int $80来进行软中断,调用系统函数。
64为的汇编放参数有6个寄存器,从左至右分别为:RDI、RSI、RDX、RCX、R8和R9,而对于系统调用R10用来替换RCX。(这里我有一个疑问,汇编里可以调用非系统调用的普通函数?看来是可以的)
默认打开3个文件
0号文件:输入,默认为键盘(可以重定向为其他输入)(cin)
1号文件:输出,默认为屏幕(可以重定向为其他输出)(cout)
2号文件:错误输出,默认为屏幕(可以重定向为其他输出)(cerr)

三、64-BITS,C LIB

在这里插入图片描述
gcc编译器,函数参数是从右到左处理的。参数入栈,是从右至左入栈。
但是汇编函数在定义参数时还是按照从左到右,这更符合人的习惯。
printf是变长参数,参数个数不是固定的。所以要将%rax设置为0,表明参数结束。
.assciz 在字符串后面加’\0’

四、32-BITS,C LIB

在这里插入图片描述
32位CPU在调用系统该函数时,是先用push?命令入栈,然后调用函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值