zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    Django基础命令
    ubuntu中python项目独立的虚拟环境
    Springboot项目的小问题
    redis
    ubuntu系统根目录下各个目录用途说明
    SpringBoot 在IDEA中实现热部署
    SpringBoot访问不到webapp下的内容
    httpServeltRequest和Model传值的区别
    map的输出
    主流框架排名
  • 原文地址:https://www.cnblogs.com/wayne-tao/p/11971922.html
Copyright © 2011-2022 走看看