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

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

2006-10-25 22:08
3958
麻痹,估计是我人品问题,道德不好,我首先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目录,傻眼了,都该乖乖躺在那里呢。。。

请朋友们支招  

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (3)
雪    币: 179
活跃值: (131)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
WAKU 7 2006-10-25 23:36
2
0
调试这几句:

.repeat
         invoke DeleteFile,addr FileNamePattern
  invoke FindNextFile,hFindFile,addr finddata
    .until  eax ==  FALSE
雪    币: 261
活跃值: (162)
能力值: ( LV13,RANK:320 )
在线值:
发帖
回帖
粉丝
qfejj 7 2006-10-26 01:30
3
0
问题在这里:
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
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
Winker 8 2006-10-26 03:37
4
0


谢谢大哥们,我明白拉

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"

不知道分析得对不对,对的话,又学好东西,错的话,接着分析
游客
登录 | 注册 方可回帖
返回