Assembly MASM32创建文件

Assembly MASM32创建文件,assembly,masm,Assembly,Masm,我试图通过MASM32中的CreateFile打开文件,但打开合法文件时,我得到的是无效的\u HANDLE_U值 .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc includelib \masm32\lib\user32.lib include \masm32\include\kernel32.inc

我试图通过MASM32中的CreateFile打开文件,但打开合法文件时,我得到的是无效的\u HANDLE_U值

.386 
.model flat,stdcall 
option casemap:none 
include \masm32\include\windows.inc 
include \masm32\include\user32.inc 
includelib \masm32\lib\user32.lib
include \masm32\include\kernel32.inc 
includelib \masm32\lib\kernel32.lib

.DATA
FileName db "C:\Users\machine\Desktop\putty.exe",NULL
BadText db "Its not ok",0
OkText db "Its ok",0
.DATA?
hFile HANDLE ?

.CODE
start: 
    invoke CreateFile,addr FileName,GENERIC_READ OR GENERIC_WRITE,FILE_SHARE_READ OR FILE_SHARE_WRITE, NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
    mov hFile,eax
    cmp hFile, INVALID_HANDLE_VALUE
    jz code1
    invoke MessageBox,NULL,addr OkText,addr OkText,MB_OK
    invoke ExitProcess,0



code1:
    invoke MessageBox,NULL,addr BadText,addr BadText,MB_OK
    invoke ExitProcess,0
    ret

end start

我尝试了\而不是\,尝试了NULL而不是0,但没有任何效果。谢谢您的帮助。

您的代码没有问题,它可以正常工作。问题一定出在目标文件上。我不知道是权限问题还是其他问题


希望这有帮助。

有两个函数,CreateFileA()使用传统的8位字符串编码,CreateFileW()使用Unicode字符串。很难猜测这些.inc文件对“CreateFile”有什么作用,我可以猜。使用CreateFileA。您不知道它为什么不工作,因为您没有编写代码来找出函数失败的原因。使用GetLastError()是不应该忽略的,即使是在汇编中也是如此。嗯,特别是在装配方面。
invoke CreateFile, addr FileName, GENERIC_WRITE, FILE_SHARE_WRITE or FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL