wordpress 网页特效seo技巧分享
1. 背景
本文补充介绍文件遍历操作的部分附加内容,譬如,过滤掉系统元文件、过滤掉重复的文件项、过滤掉隐藏文件等,并提供了基于元神操作系统的部分实现代码。
2. 方法
(1)过滤掉系统元文件
NTFS文件系统的前16个元文件是固定的系统元文件,它们都是以字符“$”开头的,所以,判断索引项的偏移0x52处的字符是否为$即可实现过滤。假设当前ESI中保存的是某个索引项的起始地址,过滤的代码片段如下所示:
cmp byte [fs:esi+0x52], '$'je .ignore
如果第一个字符是$,则跳过该索引项,以此来过滤掉系统元文件。未过滤时根目录的遍历结果如下图所示:
(2)过滤掉重复的文件项
NTFS文件系统中同时支持长文件名和短文件名的索引项,所以,名称较长的文件会存在多个索引项,导致列表重复。例如,上图中对于Documents and Settings目录,同时存在短文件名项,即DOCUME~1;另外,Program Files目录也存在短文件名PROGRA~1,System Volume Information目录也存在短文件名SYSTEM~1。
本例的目的是过滤掉重复的文件项,即同时存在长文件名和短文件名时,过滤掉短文件名,只保留显示长文件名即可。这通过判断索引项偏移0x51处的值来完成,该值表示文件命名空间,值为0时表示POSIX命名空间,值为1表示Win32命名空间,值为2表示DOS命名空间,值为3表示Win32 & DOS命名空间。对于NTFS文件系统,只要过滤掉DOS命名空间即可完成重复项的过滤,部分代码片段如下所示:
cmp byte [fs:esi+0x51], 0x02je .ignore
当命名空间值为0x02时,跳过索引项的处理,便完成了重复项的过滤。上图所示的根目录过滤结果如下图所示:
对d1:\windows目录进行重复项过滤前后的截图如下所示:
(3)过滤掉隐藏文件
根据索引项偏移0x48-0x4B处的值可以判断和过滤掉隐藏文件,代码片段如下所示:
test dword [fs:esi+0x48], 0x02jnz .ignore
索引项偏移0x48-0x4B处的值为文件属性,是位标志的组合,0x02为隐藏文件,0x04为系统文件,0x0100为临时文件。类似的,将上述代码中的0x02换成0x04即可过滤掉系统文件,换成0x0100即可过滤掉临时文件。
3. 总结
本文介绍了文件遍历过程中的过滤操作,包括过滤掉系统元文件、重复文件项、隐藏文件等。
安装元神操作系统的工具“元神操作系统安装器”可去网站www.gnxxkj.com进行下载。安装账号可去网址http://www.gnxxkj.com/app/wuziqi/register.php 进行注册。