至于磁盘的0面0道1扇区的读写,是更为低级(深入)的 *** 作,要用到25H 绝对磁盘读功能、26H 绝对磁盘写功能。
弄不好,会破坏磁盘文件系统,造成系统的崩溃,不建议施行这个 *** 作。 XP有保护机制,一般不让进行这种 *** 作。
------
呵呵,楼主连文件读写都还弄不清楚,竟然就想要弄《硬盘0面0道1扇区的内容》!!!
是蛇吞象吧?
你按照你认为《回答好多了》的答案,你也不可能做到这些。
------
采纳答案所说的:
得深入了解这个分区的文件系统,它的文件分配表的算法,FAT32还是NTFS,文件名跟内容是分别在不同的位置的,根据文件分配表来算1.TXT文档的内容在磁盘的绝对位置,有了绝对位置就知道参数了,调用绝对读写磁盘的中断例程(好久没接触中断号忘了--!),嘿嘿 ,加油啊,汇编发烧友
呵呵,这些,都是无用的。
想要实现题目所要求的内容,根本用不着这样罗嗦!!!
很明显,提问者已经被忽悠瘸了。
data segmentfname db 'test.txt',0
string db 'test123',0
data endsstack segment
db 64 dup(0)
stack endscode segment
assume ds:data,ss:stack,cs:code
start:
mov ax,data
mov ds,ax
xor ax,ax
mov dx,offset fname 创建文件
mov cx,0
mov ah,3ch
int 21h
mov dx,offset fname 打开文件
mov al,02h
mov ah,3dh
int 21h
mov bx,ax
mov dx,offset string 写文件
mov cx,8h
mov ah,40h
int 21h
mov ax,4c00h
int 21h
code ends
end start
在win32汇编中读取文件使用的函数是CreateFile函数.不管是打开文件还是创建文件都用CreateFile函数.
它的用法是:
invoke
CreateFile,lpFileName,dwDesiredAccess,
dwShareMode,lpSecurityAttributes,dwCreatio
nDisposition,dwFlagsAndAttributes,hTemplateFile
CreateFile函数的参数又多又复杂,下面是各参数的含义:
1)lpFileName指向存放有文件名的缓冲区,文件名是一个以0结尾的字符串。CreateFile函数可以打开多种对象,包括:
控制台——Windows中类似与MS-DOS方式的界面窗口。
通信设备——包括串口等设备。
目录和文件
邮件槽
管道
CreateFile函数以不同格式的文件名来区分 *** 作对象,普通的“驱动器:\路径\文件名”之类的格式指的就是普通的文件;
2)dwDesiredAccess参数是存取方式,通过这个参数可以指定要对打开的文件进行何种 *** 作,指定GENERIC_READ标志表示需要读取文件数据,指定GENERIC_WRITE标志表示需要向文件写数据,如果要对一个文件进行读写,需要同时指定两个标志。
3)dwShareMode参数是共享属性,表明文件被打开后是否允许其他进程以某种方式再次打开文件,它可以是一些取值的组合:
0——不允许文件被再次打开。
FILE_SHARE_DELETE——允许其他进程同时对文件进行删除。
FILE_SHARE_READ——允许其他进程同时以读方式打开文件。
FILE_SHAR_WRITE——允许其他进程同时以写方式打开文件。
4)lpSecurityAttributes参数为安全属性,通过这个参数可以指定返回的文件句柄是否可以被子进程继承,如果参数设置为NULL,则表明无法继承,否则需要将参数指向一个SECURITY_ATTRIBUTES结构,该结构定义为:
SECURITY_ATTRIBUTES STRUCT
nLengthDWORD ?
lpSecurityDescriptor DWORD ?
bInheritHandle DWORD ?
SECURITY_ATTRIBUTES ENDS
nLength字段需要设置为结构的长度,将bInheritHandle字段设置为TRUE就可以使句柄能够被字进程继承。
5)dwCreationDisposition参数用来设置文件已经存在或不存在时系统采取的动作,在这里指定不同的标志就可以决定函数执行的功能究竟是创建文件还是打开文件,参数可能的取值为:
CREATE_NEW——创建新文件,如果文件已经存在函数会返回失败。
CREATE_ALWAYS——创建新文件,如果文件已经存在则清除原文件。
OPEN_EXISTING——打开存在的文件,当文件不存在时函数会返回失败。
OPEN_ALWAYS——如果文件已经存在,则打开,不存在则创建新文件。
TRUNCATE_EXISTING——打开文件并将文件截断为零,当文件不存在时返回失败。
6)dwFlagsAndAttributes参数用来指定新建文件的属性,文件属性可以是下面这些取值的组合:
FILE_ATTRIBUTE_NORMAL——普通文件,设置这个属性时其他属性都不会生效。
FILE_ATTRIBUTE_ARCHIVE——设置归档属性。
FILE_ATTRIBUTE_HIDDEN——设置隐藏属性。
FILE_ATTRIBUTE_READONLY——设置只读属性。
FILE_ATTRIBUTE_SYSTEM——设置系统属性。
FILE_ATTRIBUTE_TEMPORARY——临时文件,系统会尽量把所有的文件内容保持在内存中以加快存取速度,程序在不再使用文件的时候需尽快将它删除。
此外该参数还可同时指定对文件 *** 作的方式,常用的有:
FILE_FLAG_WRITE_THROUGH——使用WriteThrough模式,系统不会对文件使用缓存,文件的改变马上会被写入到磁盘中。
FILE_FLAG_OVERLAPPED——使用异步文件 *** 作方式。
FILE_FLAG_DELETE_ON_CLOSE——文件被关闭立即被系统自动删除。
FILE_FLAG_RANDOM_ACCESS——对文件进行随机读写 *** 作( *** 作系统对该文件的缓存进行优化)
7)hTemplateFile参数指定了一个文件模版的句柄,该文件模版的所有属性都会被复制到当前创建的文件中。Windows95不支持本参数,为了保持程序的兼容性,建议再参数中使用NULL。
********************************************************************
打开文件
********************************************************************
invoke CreateFile,addr szFileName,GENERIC_READ,FILE_SHARE_READ,0,\
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
.if eax == INVALID_HANDLE_VALUE
invoke MessageBox,hWinMain,addr szErrOpenFile,NULL,MB_OK or MB_ICONEXCLAMATION
ret
.endif
mov @hFile,eax
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)