示例#1
0
    def calculate(self):
        common.set_plugin_members(self)

        nchrdev_addr = self.addr_space.profile.get_symbol("_nchrdev")
        nchrdev = obj.Object("unsigned int",
                             offset=nchrdev_addr,
                             vm=self.addr_space)

        cdevsw_addr = self.addr_space.profile.get_symbol("_cdevsw")
        cdevsw = obj.Object(
            theType="Array",
            targetType="cdevsw",
            offset=cdevsw_addr,
            vm=self.addr_space,
            count=nchrdev,
        )

        kaddr_info = common.get_handler_name_addrs(self)

        op_members = list(
            self.profile.types['cdevsw'].keywords["members"].keys())

        op_members.remove('d_ttys')
        op_members.remove('d_type')

        files = mac_list_files.mac_list_files(self._config).calculate()
        for vnode, path in files:
            if vnode.v_type.v() not in [3, 4]:
                continue

            if path.startswith("/Macintosh HD"):
                path = path[13:]

            dn = vnode.v_data.dereference_as("devnode")

            dev = dn.dn_typeinfo.dev
            major = (dev >> 24) & 0xFF

            if not (0 <= major <= nchrdev):
                continue

            cdev = cdevsw[major]

            for member in op_members:
                ptr = cdev.__getattr__(member).v()

                if ptr != 0:
                    (module,
                     handler_sym) = common.get_handler_name(kaddr_info, ptr)

                    yield (cdev.v(), path, member, ptr, module, handler_sym)
    def calculate(self):
        mac_common.set_plugin_members(self)
        
        num_files = 0

        if (not self._config.DUMP_DIR or not os.path.isdir(self._config.DUMP_DIR)):
            debug.error("Please specify an existing output dir (--dump-dir)")

        ff = mac_list_files.mac_list_files(self._config)

        for (vnode, path) in ff.calculate():
            if self._make_path(vnode, path):
                self._write_file(vnode, path)

                num_files = num_files + 1

        yield num_files
示例#3
0
    def calculate(self):
        mac_common.set_plugin_members(self)

        num_files = 0

        if not self._config.DUMP_DIR or not os.path.isdir(
                self._config.DUMP_DIR):
            debug.error("Please specify an existing output dir (--dump-dir)")

        ff = mac_list_files.mac_list_files(self._config)

        for (vnode, path) in ff.calculate():
            if self._make_path(vnode, path):
                self._write_file(vnode, path)

                num_files = num_files + 1

        yield num_files
示例#4
0
    def calculate(self):
        common.set_plugin_members(self)

        nchrdev_addr = self.addr_space.profile.get_symbol("_nchrdev")
        nchrdev = obj.Object("unsigned int", offset = nchrdev_addr, vm = self.addr_space)

        cdevsw_addr = self.addr_space.profile.get_symbol("_cdevsw")
        cdevsw = obj.Object(theType = "Array", targetType = "cdevsw", offset = cdevsw_addr, vm = self.addr_space, count = nchrdev)

        kaddr_info = common.get_handler_name_addrs(self)

        op_members = self.profile.types['cdevsw'].keywords["members"].keys()
        
        op_members.remove('d_ttys')
        op_members.remove('d_type')

        files = mac_list_files.mac_list_files(self._config).calculate()
        for vnode, path in files:
            if vnode.v_type.v() not in [3, 4]:
                continue

            if path.startswith("/Macintosh HD"):
                path = path[13:]

            dn = vnode.v_data.dereference_as("devnode") 
 
            dev   = dn.dn_typeinfo.dev
            major = (dev >> 24) & 0xff

            if not (0 <= major <= nchrdev):
                continue
        
            cdev = cdevsw[major]
           
            for member in op_members:
                ptr = cdev.__getattr__(member).v()
        
                if ptr != 0: 
                    (module, handler_sym) = common.get_handler_name(kaddr_info, ptr)

                    yield (cdev.v(), path, member, ptr, module, handler_sym)