| Line 134... |
Line 134... |
| 134 |
blocks.append(prev_addr)
|
134 |
blocks.append(prev_addr)
|
| 135 |
if prev_free:
|
135 |
if prev_free:
|
| 136 |
try:
|
136 |
try:
|
| 137 |
nfa = block.get_next_free().get_address()
|
137 |
nfa = block.get_next_free().get_address()
|
| 138 |
if nfa >= prev_addr and nfa < prev_addr + block.get_size() + 4:
|
138 |
if nfa >= prev_addr and nfa < prev_addr + block.get_size() + 4:
|
| 139 |
print("%08X: Next free block (%08X) lies within the block itself" % (prev_addr, nfa))
|
139 |
print("%08X: Next free block (%08X) is within the block itself" % (prev_addr, nfa))
|
| 140 |
except: print("%08X: Invalid next free block pointer: %08X" % (prev_addr, block.next_free))
|
140 |
except: print("%08X: Invalid next free block pointer: %08X" % (prev_addr, block.next_free))
|
| 141 |
try:
|
141 |
try:
|
| 142 |
pfa = block.get_prev_free().get_address()
|
142 |
pfa = block.get_prev_free().get_address()
|
| 143 |
if pfa >= prev_addr and pfa < prev_addr + block.get_size() + 4:
|
143 |
if pfa >= prev_addr and pfa < prev_addr + block.get_size() + 4:
|
| 144 |
print("%08X: Previous free block (%08X) lies within the block itself" % (prev_addr, pfa))
|
144 |
print("%08X: Previous free block (%08X) is within the block itself" % (prev_addr, pfa))
|
| 145 |
except:
|
145 |
except:
|
| 146 |
print("%08X: Invalid previous free block pointer: %08X" % (prev_addr, block.prev_free))
|
146 |
print("%08X: Invalid previous free block pointer: %08X" % (prev_addr, block.prev_free))
|
| 147 |
print("%08X: %08X bytes free" % (prev_addr + 4, block.get_size() + 4))
|
147 |
print("%08X: %08X bytes free" % (prev_addr + 4, block.get_size() + 4))
|
| 148 |
free_blocks.append(prev_addr)
|
148 |
free_blocks.append(prev_addr)
|
| 149 |
bytes_free = bytes_free + block.get_size() + 4
|
149 |
bytes_free = bytes_free + block.get_size() + 4
|
| Line 253... |
Line 253... |
| 253 |
print("[%d:%d:%08X] Block appears in multiple free lists" % (i, j, addr))
|
253 |
print("[%d:%d:%08X] Block appears in multiple free lists" % (i, j, addr))
|
| 254 |
else: handled_blocks.append(addr)
|
254 |
else: handled_blocks.append(addr)
|
| 255 |
try:
|
255 |
try:
|
| 256 |
nfa = block.get_next_free().get_address()
|
256 |
nfa = block.get_next_free().get_address()
|
| 257 |
if nfa >= addr and nfa < addr + size + 4:
|
257 |
if nfa >= addr and nfa < addr + size + 4:
|
| 258 |
print("[%d:%d:%08X] Next free block (%08X) lies within the block itself" % (i, j, addr, nfa))
|
258 |
print("[%d:%d:%08X] Next free block (%08X) is within the block itself" % (i, j, addr, nfa))
|
| 259 |
fatal = True
|
259 |
fatal = True
|
| 260 |
except:
|
260 |
except:
|
| 261 |
print("[%d:%d:%08X] Invalid next free block pointer: %08X" % (i, j, addr, block.next_free))
|
261 |
print("[%d:%d:%08X] Invalid next free block pointer: %08X" % (i, j, addr, block.next_free))
|
| 262 |
fatal = True
|
262 |
fatal = True
|
| 263 |
try:
|
263 |
try:
|
| 264 |
pfa = block.get_prev_free().get_address()
|
264 |
pfa = block.get_prev_free().get_address()
|
| 265 |
if pfa >= addr and pfa < addr + size + 4:
|
265 |
if pfa >= addr and pfa < addr + size + 4:
|
| 266 |
print("[%d:%d:%08X] Previous free block (%08X) lies within the block itself" % (i, j, addr, pfa))
|
266 |
print("[%d:%d:%08X] Previous free block (%08X) is within the block itself" % (i, j, addr, pfa))
|
| 267 |
if prev == None and not block.get_prev_free().is_null():
|
267 |
if prev == None and not block.get_prev_free().is_null():
|
| 268 |
print("[%d:%d:%08X] Previous free block pointer is broken: %08X (should be NULL)" % (i, j, addr, pfa))
|
268 |
print("[%d:%d:%08X] Previous free block pointer is broken: %08X (should be NULL)" % (i, j, addr, pfa))
|
| 269 |
if prev != None and prev != pfa:
|
269 |
if prev != None and prev != pfa:
|
| 270 |
print("[%d:%d:%08X] Previous free block pointer is broken: %08X (should be %08X)" % (i, j, addr, pfa, prev))
|
270 |
print("[%d:%d:%08X] Previous free block pointer is broken: %08X (should be %08X)" % (i, j, addr, pfa, prev))
|
| 271 |
except:
|
271 |
except:
|