我正在尝试打开文件进行读取,读取,操作数据,然后将其写回到文件中。我必须使用CreateFile
,GetFileSize
,VirtualAlloc
,ReadFile
/ WriteFile
,CloseHandle
和VirtualFree
函数(准系统Windows API)。
我已设法或多或少地打开了文件,但是ReadFile
失败,出现ERROR_NOACCESS
。 GetFileSize
返回正确的文件大小,因此应该足够。
我在做什么错了?
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
.data
FileIn db 'input.txt',0 ; file to read
FileOut db 'output.txt',0 ; file to write
.data?
hFile dd ?
FileSize dd ?
hMem dd ?
BytesRead dd ?
.code
start:
invoke CreateFile,
ADDR FileIn,
GENERIC_READ,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0
mov hFile, eax
invoke GetFileSize,
eax,
0
mov FileSize, eax
inc eax
invoke VirtualAlloc,
0,
eax,
MEM_COMMIT OR MEM_RESERVE,
PAGE_READWRITE
mov eax, hMem
invoke ReadFile,
hFile,
hMem,
FileSize,
ADDR BytesRead,
0
invoke CloseHandle,
hFile
(...)
编辑:
我将PAGE_READONLY
更改为PAGE_READWRITE
,但问题仍然存在...