You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NASM调用FindFirstFileAPI获取首个EXE文件,程序未弹出MessageBox求助

问题分析与修正:调用FindFirstFileA后MessageBox不弹出的问题

你的代码存在几个关键错误,导致程序无法正常触发MessageBox弹窗,以下是问题点和修正方案:

核心错误点

  • FindFirstFileA参数顺序颠倒:Windows API的FindFirstFileA原型是HANDLE FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData),必须先传递文件名指针,再传递结构体指针。你代码里先push了结构体,再push文件名,直接导致API调用失败,无法获取文件信息。
  • WIN32_FIND_DATAA结构体定义错误:FileName和AlternateFileName是用于存储文件名的字符缓冲区,不是双字数值。你用dd 260和dd 13只是把数值存在内存里,根本无法存储文件名。
  • 字符串未加NULL终止符:Windows API要求所有字符串都是C风格(以0结尾),你的exe_mask和title都没有添加db 0终止符,会导致API读取到垃圾数据,引发未定义行为。
  • MessageBoxA参数错误:你push的FileName是错误的内存位置(因为结构体定义错误),即使前面逻辑正确,也无法传递正确的文件名地址。

修正后的完整代码

extern FindFirstFileA
extern ExitProcess
extern MessageBoxA

[section .data use32]
    search_handle dd 0
    exe_mask db "*.exe", 0  ; 补充NULL终止符
    title db "Found EXE", 0 ; 补充NULL终止符
    
    ; 正确定义WIN32_FIND_DATAA结构体
    Win32data:
          FileAttributes           dd 0
          CreationTime             dd 0,0
          LastAccessTime           dd 0,0
          LastWriteTime            dd 0,0
          FileSizeHigh             dd 0
          FileSizeLow              dd 0
          Reserved0                dd 0
          Reserved1                dd 0
          FileName                 db 260 dup(0)  ; 260字节的文件名缓冲区
          AlternateFileName        db 13 dup(0)   ; 13字节的短文件名缓冲区

[SECTION CODE USE32 CLASS=CODE]
..start:
    ; 修正参数顺序:先文件名,再结构体指针
    push Win32data
    push exe_mask
    call [FindFirstFileA]
    
    ; 检查API返回值,若为-1(INVALID_HANDLE_VALUE)则表示未找到文件
    cmp eax, -1
    je exit_program
    
    mov [search_handle], eax
    
    ; 调用MessageBoxA:参数顺序为(hWnd, lpText, lpCaption, uType)
    push 0          ; MB_OK 弹窗类型
    push title      ; 弹窗标题
    push Win32data + 44  ; FileName字段的内存偏移(计算:前面所有字段总字节数为44)
    push 0          ; 父窗口句柄为NULL
    call [MessageBoxA]
    
exit_program:
    push byte 0
    call [ExitProcess]
end

汇编与链接命令

保持你原来的命令即可:

nasm -fobj find.asm
golink -oPE find win32.lib

内容的提问来源于stack exchange,提问作者Junker3465

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 10:52:39