win32asm 搜索文件

 

 

反编译用

目录只支持'/' 

 

.386
.model flat, stdcall
option casemap:none

include		windows.inc
include		gdi32.inc
includelib	gdi32.lib
include		user32.inc
includelib	user32.lib
include		kernel32.inc
includelib	kernel32.lib
include		comdlg32.inc
includelib	comdlg32.lib


;定义对话框 id

IDBEGIN equ 1007
IDEDIT equ 1005
IDFILE equ 1002
IDPATH equ 1008

BufferSize equ 256
State_Begin equ 1
State_Stop equ 2
Heap_Start = 1024 * 2 * 1024
Heap_Alloc_Size = 1024*1024 * 100


.data?
hInstance dd ?
hMainWin dd ?
hThread dd ?
hHeap dd ? 
hMem dd ?

szSearchPath db MAX_PATH dup(?)
dwSearchPathLen dd ?
dwFileCount dd ?
dwDirCount dd ?
dwFileSizeHight dd ?
dwFileSizeLow dd ?
dbState db ?
dwPos dd ?




.const 
szErrorPath db '路径错误',0
szStart db '开始',0
szStop db '停止',0
szFilter db '/*.*',0
szNextLine db '\r\n',0



.code

__get_dir_path proc pOutDir:dword,pInPath:dword,pathLen:dword
	local dwLen

	pushad
	
	mov al,'/'
	mov edi,pInPath
	add edi,pathLen
	mov ecx,pathLen
	std
	repne scasb
	jz found
	popad
	mov eax,0
	ret

found:
	mov edx,ecx
	mov ecx,pathLen
	sub ecx,edx
	mov dwLen,ecx

	mov esi,  pInPath
	mov edi , pOutDir
	cld
	rep movsb
	mov byte ptr [edi],0


	popad
	mov eax,dwLen
	ret
__get_dir_path endp

__show_file proc uses esi edx , pInPath
	local pCur:dword
	local dwLen

	inc dwFileCount
	mov esi,hMem

	invoke lstrcat,pInPath,offset szNextLine
	invoke lstrlen,pInPath
	mov dwLen,eax
	add esi,dwPos
	mov pCur,esi
	mov edx,dwPos
	add edx,dwLen
	mov dwPos,edx

	invoke lstrcpy,pCur,pInPath
	invoke SetDlgItemText,hMainWin,IDEDIT,hMem
	ret
__show_file endp

__find_files proc pInPath:dword
	local stFindFile:WIN32_FIND_DATA 
	local hFindFile
	local szPath[MAX_PATH]:byte
	local szFindFile[MAX_PATH]:byte
	local szDir[MAX_PATH]:byte
	local dwLen
	
	pushad


	invoke lstrcpy ,addr szPath , pInPath
	invoke lstrlen,addr szPath
	
	mov dwLen, eax
	mov ecx,eax
	xor eax,eax
	lea edi,pInPath
	mov al,'*'
	cld
	repne scasb
	jz find_orignal

	
	invoke lstrcat,addr szPath, addr szFilter
	add dwLen,sizeof szFilter
	invoke __get_dir_path,addr szDir,addr szPath,dwLen
	.if eax == 0
		jmp quit
	.endif
	jmp find_begin

find_orignal:
	invoke __get_dir_path,addr szDir,addr szPath,dwLen
	.if eax == 0
		jmp quit
	.endif

find_begin:
	
	invoke FindFirstFile,addr szPath,addr stFindFile
	.if eax != INVALID_HANDLE_VALUE 
		mov hFindFile,eax

		.repeat
			invoke lstrcpy,addr szFindFile,addr szDir
			invoke lstrcat, addr szFindFile,addr stFindFile.cFileName

			.if stFindFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY
				.if	stFindFile.cFileName != '.'
					inc dwDirCount
					invoke __find_files,addr szFindFile
				.endif
			.else
				invoke __show_file, addr szFindFile
			.endif
			invoke FindNextFile,hFindFile,addr stFindFile
		.until (dbState & State_Stop) || (eax == 0)
		invoke FindClose,hFindFile
	.endif


quit:
	popad
	xor eax,eax
	ret
__find_files endp

__process_search proc uses ebx edi esi, args:dword
	mov dwFileCount,0
	mov dwDirCount,0
	mov dwFileSizeHight ,0
	mov dwFileSizeLow ,0
	mov dwPos,0
	or dbState,State_Begin
	invoke GetDlgItem,hMainWin,IDBEGIN
	invoke EnableWindow,eax,TRUE

	invoke __find_files,addr szSearchPath


	mov dbState,0
	mov eax,0
	ret
__process_search endp



__dlg_proc proc uses ebx edi esi, hWnd,wMsg,wParam,lParam

	mov eax,wMsg
	.if eax == WM_CLOSE
		
		invoke EndDialog,hWnd,0
	.elseif eax == WM_INITDIALOG
		push hWnd
		pop hMainWin
		mov dbState,0
		mov hThread,0
	.elseif eax == WM_COMMAND
		mov eax, wParam
		.if ax == IDBEGIN
			.if dbState & State_Begin 
				invoke GetDlgItem,hWnd,IDBEGIN
				invoke EnableWindow,eax,FALSE
				or dbState,State_Stop
				invoke WaitForSingleObject,hThread,INFINITE
				INVOKE CloseHandle,hThread
				mov hThread,0
				invoke SetDlgItemText,hWnd,IDBEGIN,addr szStart
				invoke GetDlgItem,hWnd,IDBEGIN
				invoke EnableWindow,eax,TRUE
				
			.else
				INVOKE RtlZeroMemory,addr szSearchPath,sizeof szSearchPath
				invoke GetDlgItemText,hWnd,IDPATH,addr szSearchPath,MAX_PATH
				invoke lstrlen,addr szSearchPath
				.if eax == 0 || eax > (MAX_PATH - sizeof szFilter)
					invoke MessageBox,hWnd,addr szErrorPath,addr szErrorPath,MB_OK
				.else
					mov dwSearchPathLen,eax
					invoke GetDlgItem,hWnd,IDBEGIN
					invoke EnableWindow,eax,FALSE

					invoke SetDlgItemText,hWnd,IDBEGIN,addr szStop
					invoke CreateThread,0,0,offset __process_search,0,0,0
					mov hThread,eax
					invoke CloseHandle,eax
				.endif
			.endif 
		.endif
	.else
		mov eax,FALSE
		ret
	.endif



	mov eax,TRUE
	ret
__dlg_proc endp 



main proc
	invoke GetModuleHandle,0
	mov hInstance,eax
	invoke HeapCreate,0,Heap_Start,0
	.if eax == NULL
		jmp done
	.endif
	mov hHeap,eax

	invoke HeapAlloc,hHeap,HEAP_ZERO_MEMORY,Heap_Alloc_Size
	.if eax == NULL
		jmp done
	.endif
	mov hMem,eax

		
	invoke DialogBoxParam,hInstance,IDFILE,0,offset __dlg_proc,0
	invoke HeapFree,hHeap,0,hMem
	invoke HeapDestroy,hHeap
done:
	INVOKE ExitProcess,0
	ret
main endp
end main

 

资源:

resource.h


#define IDFILE                          1002
#define IDEDIT                          1005
#define IDBEGIN                         1007
#define IDPATH                          1008


 

rc

// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "winres.h"

/
#undef APSTUDIO_READONLY_SYMBOLS

/
// 中文(简体,中国) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

#ifdef APSTUDIO_INVOKED
/
//
// TEXTINCLUDE
//

1 TEXTINCLUDE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#include ""winres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/
//
// Dialog
//

IDFILE DIALOGEX 0, 0, 427, 218
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_TOOLWINDOW | WS_EX_WINDOWEDGE
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    EDITTEXT        IDEDIT,19,49,352,125,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN | WS_VSCROLL | NOT WS_TABSTOP
    LTEXT           "路径",IDC_STATIC,18,27,18,17
    PUSHBUTTON      "开始",IDBEGIN,298,180,102,23
    EDITTEXT        IDPATH,45,27,208,14,ES_AUTOHSCROLL,WS_EX_DLGMODALFRAME
END


/
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
    IDFILE, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 420
        TOPMARGIN, 7
        BOTTOMMARGIN, 211
    END
END
#endif    // APSTUDIO_INVOKED


/
//
// AFX_DIALOG_LAYOUT
//

IDFILE AFX_DIALOG_LAYOUT
BEGIN
    0
END

#endif    // 中文(简体,中国) resources
/



#ifndef APSTUDIO_INVOKED
/
//
// Generated from the TEXTINCLUDE 3 resource.
//


/
#endif    // not APSTUDIO_INVOKED

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值