首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
AT&T汇编学习笔记之使用文件
时间:
2015-04-04 09:21:16
阅读:
260
评论:
0
收藏:
0
[点我收藏+]
标签:
att汇编
atampt
使用文件:
系统调用
打开 5 打开要访问的文件并且创建指向该文件的句柄。
读取 3 使用文件句柄打开文件
写入 4 使用文件句柄写入
关闭 6 关闭文件并且删除文件句柄
打开:
int open(const char* pathname , int flags , mode_t mode);
eax 5
ebx 包含以空字符结尾的文件名字符串的开始位置的内存地址。
ecx 需要文件的访问;类型的标志的真数值
edx 如果是创建新文件,则表示包含unix权限的整数值
c常量: 数字值 描述
O_RDONLY 00 打开文件,只读
O_WRONLY 01 只写
O_RDWR 02 打开文件,读写访问
O_CREAT 0100 文件不存在则创建
O_EXCL 0200 与O_CREAT一起使用时
O_TRUNC 01000 如果文件存在并且按照只写,模式打开,则把文件长度截断为0.
O_APPEND 02000 把数据追加到文件尾部。
O_NONBLOCK 04000 按照非块模式打开。
O_SYNC 010000 按照同步模式打开文件(同时只允许一个写入)
O_ASYNC 020000 按照异步模式打开(同时允许多个写入操作)
打开文件代码:
.section .data
filename:
.asciz "output.txt"
..
..
.section .text
..
..
movl $filename , %ebx
movl %esp , %ebp
..
movl 8(%ebp) , %ebx
movl $5 , %eax
movl $filename , %ebx
movl $0102 , %ecx
movl $0644 , %edx
int $0x80
test %eax , %eax
js badfile
错误码:错误值:描述
EPERM 1 操作不被允许
ENOENT 2 没有此文件
EBADF 9 坏文件句柄数字
EACCES 13 权限被拒绝
EFAULT 14 坏文件地址
EBUSY 16 设备或者资源忙
EEXIST 17 文件存在
EISDIR 21 是目录
EMFILE 24 过多打开文件
EFBIG 27 文件过大
EROFS 30 只读文件系统
ENAMETOOLONG 36 文件名过长
关闭文件
movl filehandle , %ebx
movl $6 , %eax
int $0x80
read调用 ssize_t read(int fd , void* buf , size_t count);
句柄 缓冲区 字节数量
eax 3 系统调用值
ebx 打开文件的句柄
ecx 缓冲区的内存位置
edx 要读取字节数量的整数值
操作系统不能在读文件时写文件。
void *mmap(void* start,size_t length,int port,int flags,int fd,off_t offset);
内存中起始位置 字节数量 内存保护设置 要创建的映射对象类型 要映射到内存文件的句柄 文件中要复制到内存的数据的起始点
保护名称:
PORT_NONE 0 不允许数据访问
PORT_READ 1 允许读取访问
PORT_WRITE 2 允许写入访问
PORT_EXEC 4 允许执行访问
flags:
MAP_SHARE 1 和其它进程共享内存映射文件的改动
MAP_PRIVATE 2 保持所有改动对这个进程是私有的
msync 原始文件和内存文件做同步映射
munmap 从内存中删除内存映射文件并且把所有改动写入原始文件
int msync(const void* start,size_t length, int flags);
int munmap(void* start,size_t length);
MS_ASYNC 在下一次写入文件时安排更新,并且系统返回调用
MS_SYNC 系统调用等待,直到做出更新,然后再返回调用程序
系统调用值
mmap 90
munmap 91
msync 144
mmap模板
pushl $0
puhl filehandle
pushl $1
pushl $3
pushl size
pushl $0
movl %esp , %ebp
movl $90 , %eax
int $0x80
addl $24 , %esp
movl %eax , mappedfile
unmap
movl $91 , %eax
movl mappedfile , %ebx
movl size , %ecx
int $0x80
int llseek(unsigned int fd,unsigned long offset_high,unsigned long offset_low ,loff_t *result,unsigned int whence);
stack:
offset
fd
flags
port
length
start ebx
AT&T汇编学习笔记之使用文件
标签:
att汇编
atampt
原文地址:http://blog.csdn.net/u011185633/article/details/44858721
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!