elif ei_class == 2:
return 64
+def get_dl_arch(dl_path):
+ try:
+ with open(dl_path, "r+b") as f:
+ e_ident =f.read(16)
+ except IOError:
+ exctype, ioex = sys.exc_info()[:2]
+ if ioex.errno == errno.ETXTBSY:
+ print("Could not open %s. File used by another process.\nPlease "\
+ "make sure you exit all processes that might use any SDK "\
+ "binaries." % e)
+ else:
+ print("Could not open %s: %s(%d)" % (e, ioex.strerror, ioex.errno))
+ sys.exit(-1)
+
+ ei_mag0,ei_mag1_3,ei_class,ei_data,ei_version = struct.unpack("<B3sBBB9x", e_ident)
+
+ if (ei_mag0 != 0x7f and ei_mag1_3 != "ELF") or ei_class == 0:
+ print("ERROR: unknow %s" % dl_path)
+ sys.exit(-1)
+
+ if ei_class == 1:
+ arch = 32
+ elif ei_class == 2:
+ arch = 64
+
+ return arch
+
+
def parse_elf_header():
global e_type, e_machine, e_version, e_entry, e_phoff, e_shoff, e_flags,\
e_ehsize, e_phentsize, e_phnum, e_shentsize, e_shnum, e_shstrndx
executables_list = sys.argv[3:]
+dl_arch = get_dl_arch(new_dl_path)
+
errors = False
for e in executables_list:
perms = os.stat(e)[stat.ST_MODE]
old_size = os.path.getsize(e)
if old_size >= 64:
arch = get_arch()
- if arch:
+ if arch and arch == dl_arch:
parse_elf_header()
if not change_interpreter(e):
errors = True