问题
我一直在尝试各种字节计数,试图让WriteFile工作。问题是它在写入文件后立即崩溃。所有文本都在文件中,但“程序已崩溃,发送给 Microsoft??” 弹出错误对话框。
当注释掉调用 WriteFile 及其下面的所有内容时,程序运行良好并且不会崩溃。但是,当我只是取消注释 WriteFile 并将其下面的所有代码都注释掉时,它再次抬起了它的丑陋脑袋。代码如下,如果有人能看到我错过的东西,非常感谢:-)
我试过的字节长度。
我尝试了 23、24(字符串长度 + null)、25(也许我忘记了一个字节)的字节长度,并且也只使用了 SIZEOF WriteText,但它们都失败了:-(。
代码
.386
.model flat,stdcall
option casemap:none ; Case Sensitive
; Windows
include \masm32\include\windows.inc
; Kernel32
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
.data
FilePath db "C:\test.txt",0
WriteText db "This is some test text."
.code
start:
; Edit a file
invoke CreateFile, addr FilePath, GENERIC_WRITE, FILE_SHARE_WRITE or FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL
push eax ; save the file handle
; This works other than the crashing, any number less then 23
; and the file has some of the text clipped
; any larger and NUL is appended until the byte count is matched.
invoke WriteFile, eax, addr WriteText, 23, NULL, NULL
pop eax
push eax
invoke CloseHandle, eax
invoke ExitProcess, 0
end start