【AFL(四)】afl-cmin修改:文件夹相关操作鲁棒性
前言
在中已经讲了cmin和tmin两个工具,流程和用法,在中也讲了一个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】创建文件夹:
【2】shell编程_变量:https://www.runoob.com/linux/linux-shell-variable.html