Чтение файла в MASM - PullRequest
       14

Чтение файла в MASM

0 голосов
/ 20 марта 2019

Я пытаюсь открыть файл для чтения, прочитать из него, манипулировать данными и затем записать его обратно в файл.Я должен использовать функции CreateFile, GetFileSize, VirtualAlloc, ReadFile / WriteFile, CloseHandle и VirtualFree (barebones 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, но проблема остается ...

...