Exemplo n.º 1
0
 def unsortedbins(self):
     '''str: pretty formated unsortedbins str.
     '''
     head = color.magenta('unsortedbins: ')
     tail = ''
     for chunk in self.record.unsortedbins:
         tail += '<-> ' + color.blue("{:#x} ".format(chunk._addr))
     if tail == '':
         tail = color.blue('None')
     return head+tail
Exemplo n.º 2
0
    def basic(self):
        return '''libc_version:{}
arch:{}
tcache_enable:{}
libc_base:{}
heap_base:{}'''.format(
            color.yellow(self.record.libc_version),
            color.yellow(self.record.arch),
            color.yellow(self.record.tcache_enable),
            color.blue(hex(self.record.libc_base)),
            color.blue(hex(self.record.heap_base))
        )
Exemplo n.º 3
0
 def all(self):
     '''str: pretty formated all infomation of heap.
     '''
     lines = [self.banner('HeapInspect', 'green')]
     lines.append(self.basic)
     lines.append(self.fastbins)
     lines.append(self.smallbins)
     lines.append(self.largebins)
     lines.append(self.tcache_chunks)
     lines.append(
         color.magenta('top: ') +
         color.blue('{:#x}'.format(self.record.main_arena.top))
         )
     lines.append(
         color.magenta('last_remainder: ') +
         color.blue('{:#x}'.format(self.record.main_arena.last_remainder))
         )
     lines.append(self.unsortedbins)
     return '\n'.join(lines)
Exemplo n.º 4
0
 def smallbins(self):
     '''str: pretty formated smallbins str.
     '''
     lines = []
     header_fmt = color.green('({size:#x})    smallbins[{index}] ')
     for index in sorted(self.record.smallbins.keys()):
         size = 2*self.record.size_t * (index+1)
         chunks = self.record.smallbins[index]
         tail = ''
         for chunk in chunks:
             tail += "<-> " + color.blue("{:#x} ".format(chunk._addr))
         line = header_fmt.format(size=size, index=index-1) + tail
         if tail != '':
             lines.append(line)
     return '\n'.join(lines)
Exemplo n.º 5
0
    def tcache_chunks(self):
        '''str: pretty formated tcache chunks str.
        '''
        lines = []
        header_fmt = color.yellow('({size:#x})    entries[{index}] ')
        for index in sorted(self.record.tcache_chunks.keys()):
            size = 4*self.record.size_t + index*0x10
            chunks = self.record.tcache_chunks[index]
            tail = ''
            for chunk in chunks:
                tail += "-> " + color.blue("{:#x} ".format(
                    chunk._addr+2*self.record.size_t))
            line = header_fmt.format(size=size, index=index) + tail
            if tail != '':
                lines.append(line)

        return '\n'.join(lines)
Exemplo n.º 6
0
 def largebins(self):
     '''str: pretty formated largebins str.
     '''
     lines = []
     header_fmt = color.green('largebins[{index}] ')
     for index in sorted(self.record.largebins.keys()):
         size = 2*self.record.size_t * (index+1)
         chunks = self.record.largebins[index]
         tail = ''
         for chunk in chunks:
             tail += "<-> " + \
                 color.blue(
                     "{:#x}".format(chunk._addr) +
                     color.green("({:#x}) ".format(chunk.size & ~0b111))
                     )
         line = header_fmt.format(size=size, index=index-0x3f) + tail
         if tail != '':
             lines.append(line)
     return '\n'.join(lines)