Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi WriteFile字符串字节长度导致崩溃_Winapi_Assembly_Crash_Masm_Masm32 - Fatal编程技术网

Winapi WriteFile字符串字节长度导致崩溃

Winapi WriteFile字符串字节长度导致崩溃,winapi,assembly,crash,masm,masm32,Winapi,Assembly,Crash,Masm,Masm32,问题 我一直在尝试各种字节计数,试图开始工作。问题是它在写入文件后立即崩溃。所有文本都在文件中,但“程序已崩溃,发送到Microsoft?”错误对话框会弹出 当注释掉invoke WriteFile及其下面的所有内容时,程序运行良好,不会崩溃。然而,当我只是取消对WriteFile的注释并保留下面的所有代码时,它又把它注释掉了,这又让它露出了丑陋的脑袋。下面是代码,如果有人能看到我错过的东西,我将不胜感激:-) 我尝试过字节长度。 我尝试了字节长度为23、24(字符串长度+null)、25(可能

问题

我一直在尝试各种字节计数,试图开始工作。问题是它在写入文件后立即崩溃。所有文本都在文件中,但“程序已崩溃,发送到Microsoft?”错误对话框会弹出

当注释掉invoke 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 
根据:

LPNumberOfBytes写入[输出,可选]
[…]
仅当lpOverlapped参数不为NULL时,此参数才能为NULL

您已将LPNumberOfBytesWrited和lpOverlapped都设置为NULL。请将一些可写变量作为LPNumberOfBytesWrited传递给LPNumberOfBytes,它应该可以工作。

根据:

LPNumberOfBytes写入[输出,可选]
[…]
仅当lpOverlapped参数不为NULL时,此参数才能为NULL

您已将LPNumberOfBytesWrite和lpOverlapped都设置为NULL。将
添加一些可写的变量作为LPNumberOfBytesWrite传递,它应该可以工作。

Doh!我将其理解为“LPNumberOfBytesWrite[out,可选][…]只有当LPNumberOfBytesWrite参数为NULL时,此参数才可以为NULL。”(正如在这两个例子中一样,都必须为null谢谢你。Doh!我把它理解为“LPNumberOfBytesWrited[out,可选][…]只有当lpOverlapped参数为null时,这个参数才能为null。”(正如在这两个例子中一样,都必须为null谢谢你。