コード例 #1
0
    def get_dependants_of(self, lib_name):
        dependants = set()
        for root, dirs, files in os.walk(self.app_dir):
            if 'opt/libc' in root:
                continue

            for file in files:
                abs_path = os.path.join(root, file)
                try:
                    if is_elf(abs_path):
                        patch_elf = PatchElf()
                        patch_elf.log_stdout = False
                        patch_elf.log_stderr = False
                        patch_elf.log_command = False

                        needs = patch_elf.get_needed(abs_path)
                        if lib_name in needs:
                            dependants.add(
                                os.path.relpath(abs_path, self.app_dir))

                except FileNotFoundError:
                    pass
                except PatchElfError:
                    pass

        return dependants
コード例 #2
0
    def get_bundle_needed_libs(self):
        libs_needed = set()
        bundle_libs = set()
        for root, dirs, files in os.walk(self.app_dir):
            if 'opt/libc' in root:
                continue

            for file in files:
                bundle_libs.add(file)
                abs_path = os.path.join(root, file)
                try:
                    if is_elf(abs_path):
                        patch_elf = PatchElf()
                        patch_elf.log_stdout = False
                        patch_elf.log_stderr = False
                        patch_elf.log_command = False

                        libs_needed.update(patch_elf.get_needed(abs_path))
                except FileNotFoundError:
                    pass
                except PatchElfError:
                    pass

        bundle_needed = libs_needed - bundle_libs
        return bundle_needed
コード例 #3
0
 def _set_interpreter(self, file, interpreter):
     try:
         patchelf_command = PatchElf()
         patchelf_command.log_stderr = False
         bin_interpreter = patchelf_command.get_interpreter(file)
         if bin_interpreter:
             self.system_interpreter = bin_interpreter
             logging.info('Setting interpreter to: %s' % os.path.relpath(file, self.app_dir))
             patchelf_command.set_interpreter(file, interpreter)
     except PatchElfError:
         pass
コード例 #4
0
    def _set_interpreter(self, file, uuid):
        try:
            patchelf_command = PatchElf()
            patchelf_command.log_stderr = False
            real_interpreter = patchelf_command.get_interpreter(file)
            if real_interpreter.startswith('/tmp/appimage-'):
                # skip, the binary has been patched already
                return

            apprun_interpreter = self._gen_interpreter_link_path(
                real_interpreter, uuid)
            if real_interpreter and real_interpreter != apprun_interpreter:
                self.interpreters[real_interpreter] = apprun_interpreter
                logging.info('Replacing PT_INTERP on: %s' %
                             os.path.relpath(file, self.app_dir))
                logging.info('\t"%s"  => "%s"' %
                             (real_interpreter, apprun_interpreter))
                patchelf_command.set_interpreter(file, apprun_interpreter)
        except PatchElfError:
            pass