最近要出一些恶意的代码片段,有一个遍历文件夹的需求。按照要求,所有的恶意行为只能写在一个函数中,且不能有注释。Google到的遍历文件夹的代码全是递归写的。虽然gcc也支持内部函数的编译,但是这样感觉不太优雅,于是稍微修改一下,就有了下面的代码。

0x01 思路

实现思路其实很简单,其实就是链表。

  1. 用一个结构体保存 1. 当前文件夹的path的地址 2.下一个结构体的地址(初始化为NULL)。
  2. 遍历时,创建两个结构体指针,folderfirst和folderlast。用folderfirst遍历指定文件夹(如/home)的时候,如果出现新的文件夹,就用创建新的结构体,用folderlast来增加到链表中。当前文件夹遍历完成,修改folderfirst指向下一个结构体。循环结束的条件就是,folderfirst为NULL。
  3. PS: 这么实现貌似算广度优先搜索?貌似搜索文件夹BFS比DFS要快, 和OS有关系。忘了出处了,感兴趣的可以搜索一下。

其他:

  • 20180619 bug:scan根目录的时候,猜测由于部分文件没有读权限,因此程序就停了。此外,有替代工具,命令"du -h"。暂时没时间改了,有空参考一下du的源码实现吧。ftp://ftp.gnu.org/gnu/coreutils/
  • 如果有人有兴趣修改,欢迎留言讨论。

0x02 show me the code