【发布时间】:2014-12-16 05:40:24
【问题描述】:
我正在尝试通过 MASM32 中的 CreateFile 打开文件,但在打开合法文件时收到 INVALID_HANDLE_VALUE。
.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,但没有任何效果。感谢您的帮助。
【问题讨论】:
-
有两个函数,使用传统 8 位字符串编码的 CreateFileA() 和使用 Unicode 字符串的 CreateFileW()。很难猜到这些 .inc 文件对“CreateFile”做了什么,我猜到了。使用 CreateFileA。你不知道为什么它不起作用,因为你没有编写代码来找出函数失败的原因。使用 GetLastError() 不是你应该忽略的,即使在汇编中也是如此。嗯,尤其是在装配方面。