【问题标题】:MASM32 CreateFileMASM32 创建文件
【发布时间】: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() 不是你应该忽略的,即使在汇编中也是如此。嗯,尤其是在装配方面。

标签: assembly masm


【解决方案1】:

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:
    invoke CreateFile, addr FileName, GENERIC_WRITE, FILE_SHARE_WRITE or FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多