[docs]classAddressTranslator:__slots__=("_rva","_owner",)""" Mediates address translations between typed addresses such as RAW, RVA, LVA, MVA and VA including address owner and its state (linked or mapped) Semantics:: owner - object associated with the address (any object class based on `cle.Backend`) owner mapping state - sparse object can be either mapped or not (actual object's image base VA to be considered valid) RAW - offset (index) inside a file stream VA - address inside process flat virtual memory space RVA - address relative to the object's segment base (segment base normalized virtual address) LVA - linked VA (linker) MVA - mapped VA (loader) """
[docs]def__init__(self,rva,owner):""" :param rva: virtual address relative to owner's object image base :type rva: int :param owner: The object owner address relates to :type owner: cle.Backend """self._rva,self._owner=rva,owner
[docs]@classmethoddeffrom_lva(cls,lva,owner):""" Loads address translator with LVA """returncls(lva-owner.linked_base,owner)
[docs]@classmethoddeffrom_mva(cls,mva,owner):""" Loads address translator with MVA """returncls(mva-owner.mapped_base,owner)
[docs]@classmethoddeffrom_rva(cls,rva,owner):""" Loads address translator with RVA """returncls(rva,owner)
[docs]@classmethoddeffrom_raw(cls,raw,owner):""" Loads address translator with RAW address """returncls(owner.offset_to_addr(raw)-(owner.mapped_baseifowner._is_mappedelseowner.linked_base),owner)
[docs]defto_lva(self):""" VA -> LVA :rtype: int """returnself._rva+self._owner.linked_base
[docs]defto_mva(self):""" RVA -> MVA :rtype: int """returnself._rva+self._owner.mapped_base
[docs]defto_rva(self):""" RVA -> RVA :rtype: int """returnself._rva
[docs]defto_raw(self):""" RVA -> RAW :rtype: int """returnself._owner.addr_to_offset(self._rva+(self._owner.mapped_baseifself._owner._is_mappedelseself._owner.linked_base))