package main
import (
"encoding/binary"
"encoding/hex"
"flag"
"fmt"
"io/ioutil"
"log"
"os"
"strings"
)
var (
srcFile string
srcFileDefault string = "L1_DUMP_0x00100000_0x02600000.bin"
addr int64
addrDefault int64 = 0x42d040
length int64
lengthDefault int64 = 15360 * 4 * 20
outputFile string
outputFileDefault string = "output.bin"
h bool
endianFlag bool = true
)
func init() {
flag.BoolVar(&h, "h", false, "this help")
flag.BoolVar(&endianFlag, "t", false, "true: 大小端与源文件一致, false: 转换大小端")
flag.StringVar(&srcFile, "i", srcFileDefault, "输入文件")
flag.Int64Var(&addr, "s", addrDefault, "数据起始地址")
flag.Int64Var(&length, "l", lengthDefault, "提取数据长度")
flag.StringVar(&outputFile, "o", outputFileDefault, "输出文件")
flag.Usage = usage
}
func usage() {
fmt.Fprintf(os.Stderr, `
*******************************************************************************
************* Func: extract file from TT output file **************************
************* Version: 1.0 **************************
************* Author: Ys.Zhao **************************
************* Date: 2019-9-11 **************************
*******************************************************************************
`)
flag.PrintDefaults()
}
func trunc_bin_file() {
startAddrString := strings.Split(srcFile, "_")[2]
startAddrString = strings.Split(startAddrString, "0x")[1]
// startAddrString = strings.TrimLeft(startAddrString, "0")
startAddrByte, err := hex.DecodeString(startAddrString)
if err != nil {
log.Fatal(err)
return
}
startAddrInt := binary.BigEndian.Uint32(startAddrByte[:])
seek := addr - int64(startAddrInt)
fileId, err := os.Open(srcFile)
if err != nil {
log.Fatal(err)
fmt.Println("generate output file fail, please check inputfile...")
}
content := make([]byte, length)
n, err := fileId.ReadAt(content, seek)
if err != nil && int64(n) != length {
log.Fatal(err)
fmt.Println("generate output file fail, please check inputfile...")
}
if !endianFlag {
for i := 0; i < len(content); i += 2 {
tmp := binary.LittleEndian.Uint16(content[i : i+2])
binary.BigEndian.PutUint16(content[i:i+2], tmp)
}
}
err = ioutil.WriteFile(outputFile, content, os.ModePerm)
if err != nil {
log.Fatal(err)
fmt.Println("generate output file fail, please check inputfile...")
}
}
func main() {
flag.Parse()
if h {
flag.Usage()
}
trunc_bin_file()
}
extract bin
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 文章作者:Tyan博客:noahsnail.com | CSDN | 简书 可以参考https://en.wiki...
- 英文版: 中文版: 搞笑版: 转载自:https://www.cnblogs.com/smallrookie/p/...
- 首先注意usr 指 Unix System Resource,而不是User 然后通常: /usr/bin下面的都...
- -bash: /usr/local/bin/pod: /System/Library/Frameworks/Rub...