FindFirstFile和FindNextFile在程序集中崩溃我的程序。为什么?

时间:2014-08-15 20:23:43

标签: file search assembly fasm

我正在编写一个程序,用于查找扩展名为" .fly"的文件。它显示已创建文件的名称,但是当我尝试使用FindFirstFile和FindNextFile时,我的程序崩溃了。我试过FindFirstFileA(该函数的ANSI版本),但我的代码也崩溃了。如果有可能,请给我一个代码示例。

拜托,谢谢你的回答。这是我用FASM程序集编写的源代码

format pe console 4.0
include 'C:\fasm\INCLUDE\WIN32AX.INC'

; Declare a macro to make buffers
macro dup label,lcount
 { forward
   label#:
   common
    repeat lcount
   forward
    db      0
   common
    end repeat }


.code

main:

explore_directoy:
    invoke      FindFirstFile,file_extension, FIND_STRUCT   ; find the first *.fly
    mov dword [find_handle], eax

find_more_files:
    cmp eax, 0
    je exit
    call show_file

findnextfile:
    invoke FindNextFile, dword [find_handle], FIND_STRUCT
    jmp find_more_files

show_file:
    invoke MessageBox, NULL, addr msg, addr msg_caption, MB_OK ; Easy way of outputing               the text
    ;invoke MessageBox, NULL, addr cFileName, addr msg_caption, MB_OK
    ret

exit:
    invoke ExitProcess, 0

datazone:
    end_msg     db      'End of program', 0
    msg         db      'File founded', 0
    msg_caption db      'Assembly program...', 0
    file_extension db '*.fly', 0
    find_handle     dd 0              ; handles/other stuff..
    FIND_STRUCT:                      ; find structure used with searching
        dwFileAttributes    dd 0
        ftCreationTime      dd 0,0
        ftLastAccessTime    dd 0,0
        ftLastWriteTime     dd 0,0
        nFileSizeHigh       dd 0
        nFileSizeLow        dd 0
        dwReserved0         dd 0
        dwReserved1         dd 0
        dup         cFileName, 256        ; found file buffer
        dup         cAlternate, 14

.end main

2 个答案:

答案 0 :(得分:2)

你的.text部分不可写。变化

.code

section '.text' readable writable executable       

答案 1 :(得分:0)

数据应该进入.data部分,而不是.code部分。如果你的汇编程序支持未初始化的数据(所有值都定义为?),那么它应该进入.data? section(这相当于某些其他汇编程序中使用的bss(由符号开始的块)部分。)