在MASM中读取文件

时间:2019-03-20 18:36:55

标签: windows assembly x86 masm

我正在尝试打开文件进行读取,读取,操作数据,然后将其写回到文件中。我必须使用CreateFileGetFileSizeVirtualAllocReadFile / WriteFileCloseHandleVirtualFree函数(准系统Windows API)。

我已设法或多或少地打开了文件,但是ReadFile失败,出现ERROR_NOACCESSGetFileSize返回正确的文件大小,因此应该足够。

我在做什么错了?

.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,但问题仍然存在...

0 个答案:

没有答案