技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 477|回复: 1
收起左侧

【asm】遍历目录以及子目录所有文件 - 非递归

[复制链接]

25

主题

86

帖子

1157

积分

用户组: 版主

UID
1821
精华
6
威望
57 点
宅币
891 个
贡献
36 次
宅之契约
0 份
在线时间
204 小时
注册时间
2016-7-12
发表于 2017-3-13 12:27:18 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有帐号?立即注册→加入我们

x
本帖最后由 Ayala 于 2017-7-3 19:25 编辑

[Asm] 纯文本查看 复制代码
fdata struc
	h dword ?
	n dword ?
	k dword ?

fdata ends

llist struc
	_next  dword ?
	_last  dword ?
	_data  fdata <>
llist ends


.code


Dirtrav proc uses esi edi ebx fdir,fcallback,fcontext
	LOCAL fd1:WIN32_FIND_DATA
	LOCAL dp:llist
	LOCAL dir[MAX_PATH*2]:word
	LOCAL curDir[MAX_PATH]:word
	

	lea edi,fd1
	assume edi:ptr WIN32_FIND_DATA
	invoke GetCurrentDirectory,MAX_PATH,addr curDir
	
	
	mov ebx,fdir
	invoke SetCurrentDirectory,ebx
	invoke FindFirstFile,$CTA0(".\\*"),edi
	
	
	lea ebx,dp
	assume ebx:ptr llist
	mov [ebx]._next,0
	mov [ebx]._last,0
	mov [ebx]._data.h,eax
	
	.while [ebx]._data.h!=INVALID_HANDLE_VALUE 
		mov esi,[ebx]._data.h
		mov eax,fcallback
		.if eax
			PROTO@8 TYPEDEF PROTO STDCALL :DWORD,:DWORD
			invoke (PROTO@8 ptr eax),edi,fcontext
			.break .if eax	
		.endif
		mov eax,dword ptr [edi].cFileName
		and eax,0FFFFFFh		
		.if [edi].dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY && eax!=".." && ax!="."
			
			invoke crt_malloc,sizeof dp
			.if !eax
				jmp done
			.endif
			assume eax:ptr llist
			mov [eax]._next,0
			mov [eax]._last,ebx
			mov [ebx]._next,eax
			mov ebx,eax
			assume eax:ptr nothing
			
			invoke SetCurrentDirectory,addr [edi].cFileName
			invoke FindFirstFile,$CTA0(".\\*"),edi
			mov [ebx]._data.h,eax
		.else
			invoke FindNextFile,esi,edi
			.if !eax
				invoke FindClose,esi
				mov ebx,[ebx]._last
				.break .if !ebx
				invoke crt_free,[ebx]._next
				;invoke crt_system,$CTA0("PAUSE")
				invoke SetCurrentDirectory,$CTA0("..\\")
			.endif
		.endif
	.endw 
done:
	.while ebx
		invoke crt_free,[ebx]._next
		mov ebx,[ebx]._last
	.endw
	invoke SetCurrentDirectory,addr curDir
	assume edi:nothing
	xor eax,eax
	ret
Dirtrav endp

0

主题

72

帖子

166

积分

用户组: 小·技术宅

UID
1291
精华
0
威望
2 点
宅币
89 个
贡献
1 次
宅之契约
0 份
在线时间
2 小时
注册时间
2015-11-25
发表于 2017-3-22 20:29:48 | 显示全部楼层
回复

使用道具 举报

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2018-11-21 16:08 , Processed in 0.069560 second(s), 15 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表