【AFL(四)】afl-cmin修改:文件夹相关操作鲁棒性

 前言 

AFL(二)中已经讲了cmin和tmin两个工具,流程和用法,在AFL(三)中也讲了一个tmin的修改,为其加入了文件夹的修改操作。在本文中会对cmin进行小小的修改,希望能够在输出 -o 文件夹不为空的时候,不是直接退出,要求重新输入指令,而是可以把文件夹另存,程序继续进行。


 源码分析 

【一】编程方式

afl-cmin文件没有显式的后缀名,不像 afl-tmin.c 一看就是C语言,经过 gedit afl-cmin 指令查看,echo 可以看出其实这个文件是 shell 编程的。

这里推荐一个简易的快速方法:https://www.runoob.com/linux/linux-shell.html菜鸟教程

【二】分析位置

经过搜索定位“exists and is not empty”关键词,确定位置,发现其实就是一个 if 判断 if [ -d "$OUT_DIR" ]; then  true 的情况下,源代码是提示已经存在,然后 exit 了。

【三】代码设计

我希望实现的功能是这样的,当 -o 后的文件夹参数:

1. FALSE   对应文件夹不存在的话,创建新的文件夹;其实文件夹为空的情况下,也是刚刚的 if 判断也是算作 false。

2. TRUE    对应文件夹存在,且不为空,做一个备份;这里我的做法是,把源文件夹重命名,然后再新建一个同名文件夹。

【四】代码实现

#  修改文件夹操作,如果文件夹不空,则移到另一个文件夹 2019年12月2日
if [ -d "$OUT_DIR" ]; then
  echo "[x] DELETE : directory '$OUT_DIR' exists and is not empty - we will copy them to another dir 'old_$OUT_DIR'" 1>&2
#  exit 1
  if [ -d "old_$OUT_DIR" ];then
    rm -rf old_$OUT_DIR
  fi
  mv $OUT_DIR old_$OUT_DIR
  echo "[√] Create new Direction. (there is no such dir: '$OUT_DIR')"
  mkdir $OUT_DIR
else
  echo "[√] Create new Direction. (there is no such dir: '$OUT_DIR')"
  mkdir $OUT_DIR
fi

【五】演示

【六】源码

GitHub地址:https://github.com/WayneDevMaze/Chinese_noted_AFL

【七】Discassion

BUT!!!后来发现一个问题,在路径前加 old_ ,如果碰到带 ‘/’ 的路径,就乱套了,所以区分加在后面:

#  2020年1月1日 补:原来的新文件夹格式是 old_OUT_DIR ,有个问题是,当OUT_DIR路径是带/,就惨了,路径错了,所以区分方式改成,加在后面
if [ -d "$OUT_DIR" ]; then
  echo "[x] DELETE : directory '$OUT_DIR' exists and is not empty - we will copy them to another dir '$OUT_DIR_old'" 1>&2
#  exit 1
  if [ -d "${OUT_DIR}_old" ];then
    rm -rf ${OUT_DIR}_old
  fi
  mv $OUT_DIR ${OUT_DIR}_old
  echo "[√] Create new Direction. (cause there is no such dir: '$OUT_DIR')"
  mkdir $OUT_DIR
else
  echo "[√] Create new Direction. (cause there is no such dir: '$OUT_DIR')"
  mkdir $OUT_DIR
fi

重新整理后的代码,以上

【八】应用实例

对png文件进行筛检用法示例:


 Reference 

【1】创建文件夹:https://www.cnblogs.com/ziyiang/articles/8989761.html

【2】shell编程_变量:https://www.runoob.com/linux/linux-shell-variable.html

原文地址:https://www.cnblogs.com/wayne-tao/p/11971922.html