码迷,mamicode.com
首页 > 其他好文 > 详细

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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!