Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def FindFreespace(data,size=1,zeros=False):
- count, RATs, addresses, lastRAT = 0,[],[],(0,0)
- for match in re.finditer("STAR(....)",data,re.S):
- if int(addresstostring(match.groups()[0][0:2]),16)^0xFFFF == int(addresstostring(match.groups()[0][2:]),16) and match.start() + 8 + int(addresstostring(match.groups()[0][0:2]),16) >= lastRAT[1]: RATs,lastRAT = RATs + [((match.start(),match.start()+8+int(addresstostring(match.groups()[0][0:2]),16)))],(match.start(),match.start()+8+int(addresstostring(match.groups()[0][0:2]),16))
- for RAT in zip([(0,0)]+RATs,RATs+[(len(data),len(data))]):
- if zeros and RAT[0][1]+1 < RAT[1][0]:
- for match in re.finditer("".join(["\x00" for x in xrange(size)])+"\x00*",data[RAT[0][1]+1:RAT[1][0]]): addresses.append(FreeSpace(RAT[0][1]+1+match.start(),match.end()-match.start()))
- elif RAT[1][0]-RAT[0][1] >= size and RAT[0][1]+1 < RAT[1][0]: addresses.append(FreeSpace(RAT[0][1]+1, RAT[1][0]-RAT[0][1]))
- return addresses
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement