Remove redundancy in malloc_chunk command

pull/1200/head
CptGibbon 3 years ago committed by Disconnect3d
parent 1542949443
commit 36aaaf5a16

@ -301,74 +301,63 @@ def malloc_chunk(addr, fake=False, verbose=False, simple=False):
if not headers_to_print:
headers_to_print.append(message.hint(M.get(cursor)))
prev_inuse, is_mmapped, non_main_arena = allocator.chunk_flags(int(chunk["size"]))
if prev_inuse:
headers_to_print.append(message.hint("PREV_INUSE"))
if is_mmapped:
headers_to_print.append(message.hint("IS_MMAPED"))
if non_main_arena:
headers_to_print.append(message.hint("NON_MAIN_ARENA"))
print(" | ".join(headers_to_print))
for key, val in chunk.items():
print(message.system(key) + ": 0x{:02x}".format(int(val)))
print("")
return
arena = allocator.get_arena_for_chunk(cursor)
arena_address = None
is_top = False
if not fake and arena:
arena_address = arena.address
top_chunk = arena["top"]
if cursor == top_chunk:
headers_to_print.append(message.off("Top chunk"))
is_top = True
if not is_top:
fastbins = allocator.fastbins(arena_address) or {}
smallbins = allocator.smallbins(arena_address) or {}
largebins = allocator.largebins(arena_address) or {}
unsortedbin = allocator.unsortedbin(arena_address) or {}
if allocator.has_tcache():
tcachebins = allocator.tcachebins(None)
if real_size in fastbins.keys() and cursor in fastbins[real_size]:
headers_to_print.append(message.on("Free chunk (fastbins)"))
if not verbose:
fields_to_print.add("fd")
elif real_size in smallbins.keys() and cursor in bin_addrs(
smallbins[real_size], "smallbins"
):
headers_to_print.append(message.on("Free chunk (smallbins)"))
if not verbose:
fields_to_print.update(["fd", "bk"])
elif real_size >= list(largebins.items())[0][0] and cursor in bin_addrs(
largebins[(list(largebins.items())[allocator.largebin_index(real_size) - 64][0])],
"largebins",
):
headers_to_print.append(message.on("Free chunk (largebins)"))
if not verbose:
fields_to_print.update(["fd", "bk", "fd_nextsize", "bk_nextsize"])
elif cursor in bin_addrs(unsortedbin["all"], "unsortedbin"):
headers_to_print.append(message.on("Free chunk (unsortedbin)"))
if not verbose:
fields_to_print.update(["fd", "bk"])
elif (
allocator.has_tcache()
and real_size in tcachebins.keys()
and cursor + ptr_size * 2 in bin_addrs(tcachebins[real_size], "tcachebins")
):
headers_to_print.append(message.on("Free chunk (tcache)"))
if not verbose:
fields_to_print.add("fd")
out_fields = ""
verbose = True
else:
arena = allocator.get_arena_for_chunk(cursor)
arena_address = None
is_top = False
if not fake and arena:
arena_address = arena.address
top_chunk = arena["top"]
if cursor == top_chunk:
headers_to_print.append(message.off("Top chunk"))
is_top = True
if not is_top:
fastbins = allocator.fastbins(arena_address) or {}
smallbins = allocator.smallbins(arena_address) or {}
largebins = allocator.largebins(arena_address) or {}
unsortedbin = allocator.unsortedbin(arena_address) or {}
if allocator.has_tcache():
tcachebins = allocator.tcachebins(None)
if real_size in fastbins.keys() and cursor in fastbins[real_size]:
headers_to_print.append(message.on("Free chunk (fastbins)"))
if not verbose:
fields_to_print.add("fd")
elif real_size in smallbins.keys() and cursor in bin_addrs(
smallbins[real_size], "smallbins"
):
headers_to_print.append(message.on("Free chunk (smallbins)"))
if not verbose:
fields_to_print.update(["fd", "bk"])
elif real_size >= list(largebins.items())[0][0] and cursor in bin_addrs(
largebins[(list(largebins.items())[allocator.largebin_index(real_size) - 64][0])],
"largebins",
):
headers_to_print.append(message.on("Free chunk (largebins)"))
if not verbose:
fields_to_print.update(["fd", "bk", "fd_nextsize", "bk_nextsize"])
elif cursor in bin_addrs(unsortedbin["all"], "unsortedbin"):
headers_to_print.append(message.on("Free chunk (unsortedbin)"))
if not verbose:
fields_to_print.update(["fd", "bk"])
elif (
allocator.has_tcache()
and real_size in tcachebins.keys()
and cursor + ptr_size * 2 in bin_addrs(tcachebins[real_size], "tcachebins")
):
headers_to_print.append(message.on("Free chunk (tcache)"))
if not verbose:
fields_to_print.add("fd")
else:
headers_to_print.append(message.hint("Allocated chunk"))
else:
headers_to_print.append(message.hint("Allocated chunk"))
if verbose:
fields_to_print.update(["prev_size", "size", "fd", "bk", "fd_nextsize", "bk_nextsize"])

Loading…
Cancel
Save