首页
社区
课程
招聘
[求助]FindNextFile遇到困惑....
发表于: 2006-10-25 22:08 4402

[求助]FindNextFile遇到困惑....

2006-10-25 22:08
4402
麻痹,估计是我人品问题,道德不好,我首先FindFirstFile成功,然后删除windows目录下的1.txt代码:

.386
.model flat, stdcall
option casemap :none
include     windows.inc
include     user32.inc
includelib  user32.lib
include     kernel32.inc
includelib  kernel32.lib
.data
FileNamePattern db "C:\WINDOWS\1.txt",0
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
FillFileInfo proc uses edi
LOCAL finddata:WIN32_FIND_DATA
LOCAL hFindFile:DWORD
  invoke FindFirstFile,addr FileNamePattern,addr finddata
.if eax!=INVALID_HANDLE_VALUE
  mov hFindFile,eax
  invoke DeleteFile,addr FileNamePattern
  invoke FindClose,hFindFile
  .endif
  ret
FillFileInfo endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
    call FillFileInfo
    invoke ExitProcess,NULL
end start

现在在windows目录下建几个txt试验,想一起删除它们,代码:

.386
.model flat, stdcall
option casemap :none
include     windows.inc
include     user32.inc
includelib  user32.lib
include     kernel32.inc
includelib  kernel32.lib
.data
FileNamePattern db "C:\WINDOWS\*.txt",0
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
FillFileInfo proc uses edi
        LOCAL finddata:WIN32_FIND_DATA
        LOCAL hFindFile:DWORD
        invoke FindFirstFile,addr FileNamePattern,addr finddata
        .if eax!=INVALID_HANDLE_VALUE
                mov hFindFile,eax
                .repeat
         invoke DeleteFile,addr FileNamePattern
        invoke FindNextFile,hFindFile,addr finddata
                .until  eax ==  FALSE       
                invoke FindClose,hFindFile
                .endif
        ret
FillFileInfo endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
    call FillFileInfo
    invoke ExitProcess,NULL
end start

编译执行后一看windows目录,傻眼了,都该乖乖躺在那里呢。。。

请朋友们支招  

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 179
活跃值: (131)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
2
调试这几句:

.repeat
         invoke DeleteFile,addr FileNamePattern
  invoke FindNextFile,hFindFile,addr finddata
    .until  eax ==  FALSE
2006-10-25 23:36
0
雪    币: 261
活跃值: (162)
能力值: ( LV13,RANK:320 )
在线值:
发帖
回帖
粉丝
3
问题在这里:
invoke DeleteFile,addr FileNamePattern

FileNamePattern指向的字串"C:\WINDOWS\*.txt",你让DeleteFile删除哪个文件呢?既然声明了finddata,为什么不用?

稍作修改如下:

.386
.model flat, stdcall
option casemap :none
include     windows.inc
include     user32.inc
include     kernel32.inc
includelib  user32.lib
includelib  kernel32.lib

.data

FileNamePattern  db "C:\TDdownload\*.txt",0
FilePath         db "C:\TDdownload\",0
.data?
FileName db 256 dup(?)

.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
FillFileInfo proc uses edi
  LOCAL finddata:WIN32_FIND_DATA
  LOCAL hFindFile:DWORD
  
  invoke FindFirstFile,addr FileNamePattern,addr finddata
  .if eax!=INVALID_HANDLE_VALUE
    mov hFindFile,eax
    .repeat      
                    invoke RtlZeroMemory,addr FileName,sizeof FileName
                    invoke lstrcat,addr FileName,addr FilePath
                    lea eax,finddata.cFileName  
                    invoke lstrcat,addr FileName,eax
         invoke DeleteFile, addr FileName
  invoke FindNextFile,hFindFile,addr finddata
    .until  eax ==  FALSE  
    invoke FindClose,hFindFile
    .endif
  ret
FillFileInfo endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
    call FillFileInfo
    invoke ExitProcess,NULL
end start
2006-10-26 01:30
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
4


谢谢大哥们,我明白拉

FindFirstFile第二个参数 lpFindFileData中,cFileName指文件名,并不包含完整路径.

invoke lstrcat,addr FileName,addr FilePath

调用lstrcat将FilePath定义的“C:\windows\”和FileName连在一起,

lea eax,finddata.cFileName把文件名指向eax,

最后在调用lstrcat,这个时候 FileName就包含了完整的路径 既
"c:\windows\1.txt"

不知道分析得对不对,对的话,又学好东西,错的话,接着分析
2006-10-26 03:37
0
游客
登录 | 注册 方可回帖
返回
//