summaryrefslogblamecommitdiffstats
path: root/sploit/mem.py
blob: fc8a4b3e9380d1899fae3514b292dfb804c9cbd6 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
             

                                  
 





                                                                  
                      
                                          
 










                                                                           
 

                                                                                     

                      

                                               
                          

                                                                            
                
 


                                   



                                                              
class Symtbl:
    def __init__(self, **kwargs):
        self.__dict__ = {**kwargs}

    def adjust(self, off):
        self.__dict__ = {k:v+off for k,v in self.__dict__.items()}

    def rebase(self, sym):
        self.adjust(-sym)

    def __str__(self):
        return __str__(self,self.__dict__)

class Memmap:
    def __init__(self, tbl, sym, addr):
        object.__setattr__(self,'__tbl__', tbl)
        base = addr if sym == 'base' else addr - getattr(self.__tbl__, sym)
        object.__setattr__(self,'base', base)

    def __getattribute__(self, sym):
        if sym == '__tbl__' or sym == 'base':
            return object.__getattribute__(self, sym)
        a = getattr(self.__tbl__, sym)
        return self.base + a

    def __setattr__(self, k, v):
        raise TypeError('Memmaps are Read-Only! Modify offsets with Symtbl instead!')

    def __str__(self):
        s = __str__(self,self.__tbl__.__dict__)
        pos = -1
        for i in range(2):
            pos = s.find('\n',pos+1)
        s = s[:pos] + __tbl_format__.format(hex(self.base),'base') + s[pos:]
        return s

__tbl_format__ = '\n{:<20} {:<20}'
def __str__(self,tbl):
    s = 'symbols: ' + str(len(tbl))
    s += __tbl_format__.format('ADDRESS', 'SYMBOL')
    for sym,off in sorted(tbl.items(),key=lambda x:x[1]):
        s += __tbl_format__.format(hex(getattr(self,sym)),sym)
    return s