1. 背景
本文开始介绍文件搜索操作,根据提供的文件完整路径,从根目录开始逐层搜索,直至搜索到目标文件后解析文件的信息。本文同时提供了基于元神操作系统的实现代码。
2. 方法
(1)迭代搜索逻辑
对前述文件遍历代码进行修改,形成文件搜索代码。从根目录开始搜索,搜索到第一层目录后读取其MFT编号,根据该编号搜索下一层目录,依此类推,直至搜索到目标文件。相应的代码片段如下所示:
;input:
; esi: file absolute directory ended with 0
; e.g '\dir0\dir1\file.txt',0
;output:
; edi: point to dest index entry if found, will not be changed otherwise
; CF=1: found
; CF=0: not found
search_file:
pusha
mov edi, esi
inc edi
mov eax, 5
.search_file:
cmp byte [fs:edi], 0
je .end
mov edx, edi
mov esi, [ds:mem_addr]
mov ebp, esi
add ebp, 1024
call search_fold_file
jc .found
jmp .end
.found:
mov esi, edi
mov edi, edx
.check_next_file:
cmp byte [fs:edi], 0
je .finish_found
cmp byte [fs:edi], '\'
je .search_sub
inc edi
jmp .check_next_file
.search_sub:
inc edi
mov eax, dword [fs:esi+0x00]
jmp .search_file
.fi