Advertisement
Guest User

Untitled

a guest
May 30th, 2021
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.75 KB | None | 0 0
  1.  
  2.  
  3.  
  4.  
  5. PARTITION_TYPES = {0: "Empty", 238: "GPT protective MBR"}
  6.  
  7.  
  8. class MBR:
  9.     def __init__(self):
  10.         self.bootstrap = None
  11.         self.entries = []
  12.         self.signature = None
  13.  
  14.     def read_from_file(self, filename):
  15.         f = open(filename, 'rb')
  16.  
  17.         self.bootstrap = f.read(0x01BE)
  18.        
  19.         for i in range(4):
  20.             self.entries.append(f.read(16))
  21.  
  22.         self.signature = f.read(2)
  23.  
  24.         f.close()
  25.  
  26.         assert self.signature == bytes([0x55, 0xAA])
  27.  
  28.     def print_entries(self):
  29.         def extract_n_bits(x, start, n):
  30.             mask = ((1 << x) - 1) << start;
  31.             return n & mask;
  32.  
  33.         for i, entry in enumerate(self.entries):
  34.             print("==== Entry:", i, "====")
  35.             print("Status:", entry[0])
  36.        
  37.             print("First sector CHS:")
  38.                                    
  39.             cylinder = extract_n_bits(entry[2], 0, 2) + (entry[3] << 8)
  40.             sector = extract_n_bits(entry[2], 2, 6)
  41.  
  42.             print("* head:", entry[1])
  43.             print("* cylinder:", cylinder)
  44.             print("* sector:", sector)
  45.            
  46.             print("Partition type:", PARTITION_TYPES[entry[4]])
  47.  
  48.             print("Last sector CHS:")
  49.  
  50.             cylinder = extract_n_bits(entry[6], 0, 2) + (entry[7] << 8)
  51.             sector = extract_n_bits(entry[6], 2, 6)
  52.  
  53.             print("* head:", entry[5])
  54.             print("* cylinder:", cylinder)
  55.             print("* sector:", sector)
  56.  
  57.             print("LBA of first sector:", hex(int.from_bytes(entry[8:12], 'little')))
  58.  
  59.             print("Number of sectors:", int.from_bytes(entry[12:16], 'little'))
  60.            
  61.  
  62.        
  63.  
  64.  
  65. mbr = MBR()
  66.  
  67. mbr.read_from_file('sda')
  68. #mbr.read_from_file('/dev/sda')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement