Assembly MASM32创建文件
我试图通过MASM32中的CreateFile打开文件,但打开合法文件时,我得到的是无效的\u HANDLE_U值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
.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