为什么我的writefile函数不起作用?

时间:2018-12-27 10:48:37

标签: assembly masm irvine32

读取文件功能正常运行,但写入完全无效。请帮助我解决此问题。甚至我也找不到确切的问题。

INCLUDE Irvine32.inc

.data
filename  byte "Input.txt",0
filelist byte 6000 dup(?),0
filelength dword ?
filehandle dword ?


.code
main PROC
call ReadFileInput
MOV ECX,1000
MOV EDX,offset filelist
CALL WRITESTRING
call WriteFileOutput



;    call dumpregs

    exit
main ENDP

ReadFileInput proc

mov edx,offset filename
call OpenInputFile
mov ecx,10000
mov filehandle, eax
mov edx,offset filelist

call ReadFromFile

mov filelength,eax


RET
ReadFileInput ENDP

WriteFileOutput PROC

mov edx,offset filename
mov eax,filehandle
mov edx,offset filelist
mov ecx, 10000
call WriteToFile
call closefile
Ret
WriteFileOutput ENDP



END main

2 个答案:

答案 0 :(得分:1)

filelist byte 6000 dup(?),0      <<<<<< 6001 bytes
filelength dword ?
filehandle dword ?



mov ecx,10000                    <<<<<< 10000 bytes
mov filehandle, eax
mov edx,offset filelist
call ReadFromFile

ReadFromFile 操作将覆盖您以后需要使用的文件句柄 WriteToFile


您的代码在实际输出内容之前会错过对 CreateOutputFile 的调用!

OpenInputFile 获得的文件句柄不适合。提及 ...输入... 已经说了。

答案 1 :(得分:0)

Irvine的OpenInputFile仅打开文件以供输入,即用于读取访问权限。但是对于Irvine的WriteToFile,您需要一个具有写权限的句柄。 Irvine的库没有特定功能来打开具有读写访问权限的文件,您必须使用Windows函数CreateFileA,该函数在Irvine的SmallWin.inc中具有原型CreateFile

更改

mov edx,offset filename
call OpenInputFile

invoke CreateFile, OFFSET filename, GENERIC_READ OR GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0