Toggle Light / Dark / Auto color theme
Toggle table of contents sidebar
Source code for cle.backends.elf.relocation
import importlib
import logging
import os
from collections import defaultdict
import archinfo
from cle.backends.relocation import Relocation
ALL_RELOCATIONS = defaultdict ( dict )
complaint_log = set ()
path = os . path . dirname ( os . path . abspath ( __file__ ))
log = logging . getLogger ( name = __name__ )
[docs]
def load_relocations ():
for filename in os . listdir ( path ):
if not filename . endswith ( ".py" ):
continue
if filename == "__init__.py" :
continue
log . debug ( "Importing ELF relocation module: %s " , filename [: - 3 ])
module = importlib . import_module ( ". %s " % filename [: - 3 ], "cle.backends.elf.relocation" )
try :
arch_name = module . arch
except AttributeError :
continue
for item_name in dir ( module ):
if item_name not in archinfo . defines :
continue
item = getattr ( module , item_name )
if not isinstance ( item , type ) or not issubclass ( item , Relocation ):
continue
ALL_RELOCATIONS [ arch_name ][ archinfo . defines [ item_name ]] = item
[docs]
def get_relocation ( arch , r_type ):
if r_type == 0 :
return None
try :
return ALL_RELOCATIONS [ arch ][ r_type ]
except KeyError :
if ( arch , r_type ) not in complaint_log :
complaint_log . add (( arch , r_type ))
log . warning ( "Unknown reloc %d on %s " , r_type , arch )
return None
load_relocations ()