Python显示二进制文件内容

 

#!/usr/bin/python

import sys
import struct
import re

fname = "memory.bin"
base_addr = 0x3800000
swap = 0

def fs2_dump(start_addr, pos, size, word, fp):
    index = 0
    offset = 0
    fp.seek(pos,0)
    print
    if word == 4:
        while size>0:
            if index == 0:
                print "%08x(%04d):  " %(start_addr,offset),
                start_addr = start_addr + 16
                offset = offset+16
            data = fp.read(4)
            if len(data) == 0:
                break
            else:
                temp = data.encode('hex')   
                if swap == 1:
                    temp = temp[6:8]+temp[4:6]+temp[2:4]+temp[0:2]
                #print "0x%08x" % struct.unpack('L',data),
                print "%8s " % (temp),
                index = index +1
            if index == 4:
                index = 0
                print
            size = size-4
    elif word == 1:
        while size>0:
            if index == 0:
                print "%08x(%04d):  " %(start_addr,offset),
                start_addr = start_addr + 16
                offset = offset+16
            data = fp.read(1)
            if len(data) == 0:
                break
            else:
                temp = data.encode('hex')   
                print "%2s " % (temp),
                index = index +1
            if index == 16:
                index = 0
                print
            size = size-1
    else:
        print "word="+str(word)+" is not supported"
    print
# end of function fs2_dump

#args_format = "0x3801180..+0x100"
if  len(sys.argv) < 3:
    print "Usage: ", sys.argv[0], "0x03800000..+0x100 word"
    sys.exit()
input_args = sys.argv[1]
start = re.search("^(0x[0-9a-fA-F]{1,8})/././+(0x[0-9a-fA-F]{1,8})$",input_args)
#print start.groups()
read_addr = eval(start.group(1))
read_size = eval(start.group(2))

#read_addr = eval(sys.argv[1])
#read_size = eval(sys.argv[2])
#if sys.argv[3] == "word":
if sys.argv[2] == "word":
    word = 4
else:
    word = 1
try:
    fp = open(fname, 'rb')
except IOError:
    print "Failed to open"+fname
else:
    offset = read_addr - base_addr
    fs2_dump(read_addr, offset,read_size,word,fp)
#fp.seek(offset,0)
#(a,b,c) = struct.unpack(">iii",fp.read(4+4+4))
#print "%x %x %x" % (a,b,c)
fp.close()
#print sys.byteorder

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值