登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

fyzjhh的博客

データベース管理者 の ブログ 、江です

 
 
 

日志

 
 

二进制编辑文件脚本  

2015-02-05 15:37:19|  分类: 软件 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


#! /bin/bash

# Comment : This is a file to run
# Author  : jianghehui
# Date    : 2013-09-09

export LANG=en_US.UTF-8
curabspath=`pwd`

usage() {
echo usage: $filename [ -i infile -o outfile -p 1024 -l 4 -t s|i|l|h -d "xxx|123|123456|af12" ]
  echo ""
}


in_file=""
out_file=""
file_pos=0
len=0
data_type=s
data_val=""

while getopts "i:o:p:l:t:d:" arg ; do
  case $arg in
    i)
       in_file="$OPTARG"
       ;;
    o)
       out_file="$OPTARG"
       ;;
    p)
       file_pos="$OPTARG"
       ;;
    l)
       len="$OPTARG"
       ;;
    t)
       data_type="$OPTARG"
       ;;
    d)
       data_val="$OPTARG"
       ;;
    ?) 
       { usage; exit 1; }
       ;;
  esac
done

echo -e `date "+%F %T"` "\tstart" 

cmd="echo -ne > ${out_file}"
echo -e `date "+%F %T"` "\t$cmd"
eval $cmd

# 第一步
cnt=`expr ${file_pos} - 1`
cmd="dd if=${in_file} of=${out_file} bs=1 count=${cnt} skip=0 seek=0"
echo -e `date "+%F %T"` "\t$cmd"
eval $cmd

# 第二步
data_len=0
tmp_str=""
resultstr=""
pos=1
if [ "${data_type}" == "i" ] ; then
        data_len=4
        tmp_str=`printf "%08x" "${data_val}"`
        for i in `seq 1 ${data_len}` ; do
        resultstr="\x"`expr substr ${tmp_str} ${pos} 2`"${resultstr}"
        pos=`expr ${pos} + 2`
        done
        echo "i $resultstr"
fi

if [ "${data_type}" == "l" ] ; then
        data_len=8
        tmp_str=`printf "%016x" "${data_val}"`
        for i in `seq 1 ${data_len}` ; do
        resultstr="\x"`expr substr ${tmp_str} ${pos} 2`"${resultstr}"
        pos=`expr ${pos} + 2`
        done
        echo "l $resultstr"
fi

if [ "${data_type}" == "h" ] ; then
        data_len=`expr length ${data_val}`
        data_len=`expr ${data_len} / 2`
        tmp_str="${data_val}"
        for i in `seq 1 ${data_len}` ; do
        resultstr="${resultstr}\x"`expr substr ${tmp_str} ${pos} 2`
        pos=`expr ${pos} + 2`
        done
        echo "h $resultstr"
fi

if [ "${data_type}" == "s" ] ; then
        data_len=`expr length "${data_val}"`
        tmp_str="${data_val}"
        resultstr="${tmp_str}"
        echo "s $resultstr"
fi

echo "resultstr is ${resultstr}"
cmd="echo -ne \"${resultstr}\" | dd of=${out_file} bs=1 seek=${file_pos}"
echo -e `date "+%F %T"` "\t$cmd"
eval $cmd

# 第三步
file_len=`wc -c ${in_file} | awk '{print $1}'`
cnt=`expr ${file_len} - ${file_pos} - ${len}`
skip_cnt=`expr ${file_pos} + ${len}`
seek_cnt=`expr ${file_pos} + ${data_len}`
cmd="dd if=${in_file} of=${out_file} bs=1 count=${cnt} skip=${skip_cnt} seek=${seek_cnt}"
echo -e `date "+%F %T"` "\t$cmd"
eval $cmd

#######################################################
#######################################################

echo -e `date "+%F %T"` "\tend"


实例:

./hex_set.sh  -i cachedir/configcache.dat -o o2 -p 16 -l 4 -t i -d 65535
./hex_set.sh  -i cachedir/configcache.dat -o o2 -p 32 -l 8 -t l -d 1048575
./hex_set.sh  -i cachedir/configcache.dat -o o2 -p 40 -l 8 -t s -d "version1"
./hex_set.sh  -i cachedir/configcache.dat -o o2 -p 48 -l 4 -t h -d "01020304"
  评论这张
 
阅读(234)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018