qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v4 8/8] BitmapLog: python script for extracting


From: Dr. David Alan Gilbert
Subject: Re: [Qemu-devel] [PATCH v4 8/8] BitmapLog: python script for extracting bitmap from a binary file
Date: Fri, 18 Jul 2014 12:17:18 +0100
User-agent: Mutt/1.5.23 (2014-03-12)

* Sanidhya Kashyap (address@hidden) wrote:
> Signed-off-by: Sanidhya Kashyap <address@hidden>

I'm not really a python-person, but one observation:

> +def get_string(value, length):
> +     name = struct.unpack('<'+str(length)+'s', value)[0]
> +     for i in range(len(name)):
> +             if name[i] == '\x00':
> +                     return name[:i]

Would it have been easier for you to format the strings in the stream
the same way the migration does it; i.e. a length byte followed by the text
of the string?

Dave

> +
> +def dump_ram_block_info(infile):
> +     total_blocks = get_integer(infile.read(int_bytes))
> +     for i in range(total_blocks):
> +             block_name = get_string(infile.read(string_bytes), string_bytes)
> +             block_offset = 
> get_unsigned_long_integer(infile.read(long_bytes))
> +             block_length = 
> get_unsigned_long_integer(infile.read(long_bytes))
> +             block_list.append(dict(name=block_name, offset=block_offset, 
> length=block_length))
> +     print block_list
> +
> +def dump_bitmap(infile, bitmap_length):
> +     marker = 'M'
> +     count = 0
> +     value = ' '
> +     while True:
> +             if len(value) == 0  or marker != 'M':
> +                     print len(complete_bitmap_list)
> +                     print "issue with the dump"
> +                     return
> +             bitmap_list = []
> +             bitmap_raw_value = infile.read(long_bytes * bitmap_length)
> +             if not bitmap_raw_value:
> +                     print len(bitmap_raw_value)
> +                     break
> +             count+=1
> +             for i in range(bitmap_length):
> +                     mark = i * long_bytes
> +                     
> bitmap_list.append(hex(get_unsigned_long_integer(bitmap_raw_value[mark:mark+long_bytes])))
> +             complete_bitmap_list.append(bitmap_list)
> +             value = infile.read(1)
> +             marker = get_char(value)
> +     print complete_bitmap_list
> +
> +def main():
> +     extracter = argparse.ArgumentParser(description='Extract dirty bitmap 
> from binary file.')
> +     extracter.add_argument('infile', help='Input file to extract the 
> bitmap')
> +     args = extracter.parse_args()
> +     print 'The filename is {}'.format(args.infile)
> +
> +     infile = open(format(args.infile), 'rb')
> +
> +     ram_bitmap_pages = get_long_integer(infile.read(long_bytes))
> +     print ram_bitmap_pages
> +     dump_ram_block_info(infile)
> +     bitmap_length = ram_bitmap_pages / (long_bytes * byte_size)
> +     if ram_bitmap_pages % (long_bytes * byte_size) != 0:
> +             bitmap_length += 1
> +     print bitmap_length
> +
> +     dump_bitmap(infile, bitmap_length);
> +
> +     infile.close()
> +
> +if __name__ == '__main__':
> +     main()
> -- 
> 1.9.3
> 
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK



reply via email to

[Prev in Thread] Current Thread [Next in Thread]