Rizin
unix-like reverse engineering framework and cli tools
|
#include <rz_types.h>
#include <rz_util.h>
#include <rz_lib.h>
#include <rz_bin.h>
#include <rz_core.h>
#include <rz_syscall.h>
#include "../format/mach0/kernelcache.h"
#include "../format/xnu/mig_index.h"
Go to the source code of this file.
Classes | |
struct | _RPrelinkRange |
struct | _RStubsInfo |
struct | _RKext |
struct | _RKextIndex |
struct | _RzParsedPointer |
struct | _RKmodInfo |
struct | _r_sysent |
Macros | |
#define | VFILE_NAME_REBASED "rebased" |
#define | KEXT_SHORT_NAME_FROM_SECTION(io_section) |
#define | KEXT_INFER_VSIZE(index, i) ((i + 1 < index->length) ? index->entries[i + 1]->vaddr - index->entries[i]->vaddr : UT64_MAX) |
#define | KEXT_INFER_PSIZE(index, i) ((i + 1 < index->length) ? index->entries[i + 1]->range.offset - index->entries[i]->range.offset : UT64_MAX) |
#define | RZ_K_CONSTRUCTOR_TO_ENTRY 0 |
#define | RZ_K_CONSTRUCTOR_TO_SYMBOL 1 |
#define | K_PPTR(p) p_ptr(p, obj) |
#define | K_RPTR(buf) rz_ptr(buf, obj) |
#define | IS_PTR_AUTH(x) ((x & (1ULL << 63)) != 0) |
#define | IS_PTR_BIND(x) ((x & (1ULL << 62)) != 0) |
#define | rz_kext_index_foreach(index, i, item) |
#define | IS_KERNEL_ADDR(x) ((x & 0xfffffff000000000L) == 0xfffffff000000000L) |
#define | K_MIG_SUBSYSTEM_SIZE (4 * 8) |
#define | K_MIG_ROUTINE_SIZE (5 * 8) |
#define | K_MIG_MAX_ROUTINES 100 |
Typedefs | |
typedef struct _RPrelinkRange | RPrelinkRange |
typedef struct _RStubsInfo | RStubsInfo |
typedef struct _RKext | RKext |
typedef struct _RKextIndex | RKextIndex |
typedef struct _RzParsedPointer | RzParsedPointer |
typedef struct _RKmodInfo | RKmodInfo |
typedef struct _r_sysent | RSysEnt |
Variables | |
RzBinPlugin | rz_bin_plugin_xnu_kernelcache |
RzLibStruct | rizin_plugin |
Definition at line 1296 of file bin_xnu_kernelcache.c.
Definition at line 88 of file bin_xnu_kernelcache.c.
Definition at line 89 of file bin_xnu_kernelcache.c.
#define K_MIG_MAX_ROUTINES 100 |
Definition at line 1449 of file bin_xnu_kernelcache.c.
#define K_MIG_ROUTINE_SIZE (5 * 8) |
Definition at line 1448 of file bin_xnu_kernelcache.c.
#define K_MIG_SUBSYSTEM_SIZE (4 * 8) |
Definition at line 1447 of file bin_xnu_kernelcache.c.
Definition at line 85 of file bin_xnu_kernelcache.c.
Definition at line 86 of file bin_xnu_kernelcache.c.
#define KEXT_INFER_PSIZE | ( | index, | |
i | |||
) | ((i + 1 < index->length) ? index->entries[i + 1]->range.offset - index->entries[i]->range.offset : UT64_MAX) |
Definition at line 79 of file bin_xnu_kernelcache.c.
#define KEXT_INFER_VSIZE | ( | index, | |
i | |||
) | ((i + 1 < index->length) ? index->entries[i + 1]->vaddr - index->entries[i]->vaddr : UT64_MAX) |
Definition at line 76 of file bin_xnu_kernelcache.c.
#define KEXT_SHORT_NAME_FROM_SECTION | ( | io_section | ) |
Definition at line 55 of file bin_xnu_kernelcache.c.
#define RZ_K_CONSTRUCTOR_TO_ENTRY 0 |
Definition at line 82 of file bin_xnu_kernelcache.c.
#define RZ_K_CONSTRUCTOR_TO_SYMBOL 1 |
Definition at line 83 of file bin_xnu_kernelcache.c.
#define rz_kext_index_foreach | ( | index, | |
i, | |||
item | |||
) |
#define VFILE_NAME_REBASED "rebased" |
Definition at line 15 of file bin_xnu_kernelcache.c.
typedef struct _RKextIndex RKextIndex |
typedef struct _RKmodInfo RKmodInfo |
typedef struct _RPrelinkRange RPrelinkRange |
typedef struct _RStubsInfo RStubsInfo |
typedef struct _RzParsedPointer RzParsedPointer |
Definition at line 1791 of file bin_xnu_kernelcache.c.
References rz_bin_object_t::bin_obj, get_baddr(), MACH0_(), and rz_bin_file_t::o.
|
static |
Definition at line 400 of file bin_xnu_kernelcache.c.
References bytes, rz_xnu_kernelcache_obj_t::cache_buf, field_name, get_sections(), i, K_PPTR, K_RPTR, MACH0_(), _RKext::name, _RKmodInfo::name, NULL, rz_xnu_kernelcache_file_range_t::offset, _RKext::range, rz_buf_read_at(), RZ_FREE, rz_kext_fill_text_range(), rz_kext_free(), rz_list_free(), rz_list_newf(), rz_list_push(), RZ_NEW0, RZ_NEWS0, sections(), rz_xnu_kernelcache_file_range_t::size, _RKmodInfo::start, start, strdup(), _RKext::text_range, ut64(), and _RKext::vaddr.
Referenced by ensure_kexts_initialized().
Definition at line 977 of file bin_xnu_kernelcache.c.
References b, rz_buf_read_at(), rz_buf_size(), and rz_xnu_kernelcache_buf_is_kernelcache().
Definition at line 873 of file bin_xnu_kernelcache.c.
References rz_bin_symbol_t::bind, count, rz_bin_symbol_t::forwarder, i, kext_short_name(), rz_bin_symbol_t::name, rz_bin_symbol_t::paddr, RZ_BIN_ENTRY_TYPE_INIT, rz_list_append(), RZ_NEW0, rz_str_newf(), rz_xnu_kernelcache_file_range_t::size, rz_bin_symbol_t::size, _RKext::text_range, type, rz_bin_symbol_t::type, ut64(), _RKext::vaddr, and rz_bin_symbol_t::vaddr.
Referenced by process_kmod_init_term().
|
static |
Definition at line 1800 of file bin_xnu_kernelcache.c.
References rz_bin_object_t::bin_obj, rz_bin_file_t::o, and rz_kernel_cache_free().
|
static |
Definition at line 190 of file bin_xnu_kernelcache.c.
References carve_kexts(), filter_kexts(), rz_xnu_kernelcache_obj_t::kexts, kexts_from_load_commands(), rz_xnu_kernelcache_obj_t::kexts_initialized, NULL, rz_xnu_kernelcache_obj_t::prelink_info, rz_kext_index_new(), rz_list_free(), and rz_list_length().
Referenced by maps(), sections(), symbols(), and symbols_from_stubs().
Definition at line 778 of file bin_xnu_kernelcache.c.
References rz_bin_object_t::bin_obj, free(), if(), newEntry(), NULL, rz_bin_file_t::o, rz_xnu_kernelcache_obj_t::pa2va_exec, process_constructors(), RZ_K_CONSTRUCTOR_TO_ENTRY, rz_list_append(), rz_list_newf(), and ut64().
Definition at line 1616 of file bin_xnu_kernelcache.c.
References addr, adrp(), ldr(), rz_read_le32(), ut64(), and _RKext::vaddr.
Referenced by symbols_from_stubs().
|
static |
Definition at line 284 of file bin_xnu_kernelcache.c.
References eprintf, if(), kexts_sort_vaddr_func(), _CFKeyValue::key, _RKext::mod_info, _RKext::name, NULL, rz_xnu_kernelcache_file_range_t::offset, rz_xnu_kernelcache_obj_t::pa2va_data, rz_xnu_kernelcache_obj_t::pa2va_exec, _CFValueDict::pairs, rz_xnu_kernelcache_obj_t::prelink_info, _RKext::range, RZ_CF_INTEGER, RZ_CF_STRING, RZ_FREE, rz_kext_fill_text_range(), rz_kext_free(), rz_list_newf(), rz_list_push(), rz_list_sort(), RZ_NEW0, rz_xnu_kernelcache_file_range_t::size, type, _CFValue::type, _RKext::vaddr, _CFKeyValue::value, and _CFValueArray::values.
Referenced by ensure_kexts_initialized().
|
static |
Definition at line 223 of file bin_xnu_kernelcache.c.
References get_sections(), i, MACH0_(), NULL, rz_xnu_kernelcache_file_range_t::offset, _RPrelinkRange::pa2va_data, _RPrelinkRange::pa2va_exec, _RPrelinkRange::range, RZ_FREE, RZ_MIN, RZ_NEW0, sections(), and rz_xnu_kernelcache_file_range_t::size.
|
static |
Definition at line 1729 of file bin_xnu_kernelcache.c.
References addr, get_sections(), _RStubsInfo::got, _RStubsInfo::got_addr, i, K_PPTR, MACH0_(), NULL, rz_xnu_kernelcache_file_range_t::offset, RZ_FREE, RZ_NEW0, sections(), rz_xnu_kernelcache_file_range_t::size, and _RStubsInfo::stubs.
Referenced by symbols_from_stubs().
|
static |
Definition at line 1156 of file bin_xnu_kernelcache.c.
References rz_bin_section_t::is_data, and rz_bin_section_t::name.
Referenced by sections_from_mach0().
Definition at line 1770 of file bin_xnu_kernelcache.c.
References rz_bin_info_t::arch, rz_bin_info_t::bclass, rz_bin_info_t::big_endian, rz_bin_info_t::bits, rz_bin_info_t::dbg_info, rz_bin_info_t::file, rz_bin_file_t::file, rz_bin_info_t::has_va, rz_bin_info_t::machine, NULL, rz_bin_info_t::os, rz_bin_info_t::rclass, RZ_NEW0, strdup(), rz_bin_info_t::subsystem, and rz_bin_info_t::type.
Referenced by rz_rebase_info_free().
Definition at line 868 of file bin_xnu_kernelcache.c.
References _RKext::name.
Referenced by create_initterm_syms(), symbols(), and symbols_from_stubs().
|
static |
Definition at line 544 of file bin_xnu_kernelcache.c.
References rz_xnu_kernelcache_obj_t::cache_buf, calloc(), free(), i, K_PPTR, LC_KEXT, length, _RKext::name, NULL, rz_xnu_kernelcache_file_range_t::offset, rz_xnu_kernelcache_obj_t::pa2va_data, rz_xnu_kernelcache_obj_t::pa2va_exec, _RKext::range, rz_buf_read_at(), rz_buf_read_le32_at, rz_buf_read_le64_at, rz_buf_size(), rz_kext_fill_text_range(), rz_kext_free(), rz_list_free(), rz_list_newf(), rz_list_push(), RZ_NEW0, st32, strdup(), ut64(), and _RKext::vaddr.
Referenced by ensure_kexts_initialized().
|
static |
Definition at line 113 of file bin_xnu_kernelcache.c.
Referenced by baddr(), carve_kexts(), get_prelink_info_range_from_mach0(), get_stubs_info(), process_constructors(), process_kmod_init_term(), resolve_mig_subsystem(), resolve_syscalls(), rz_kernel_cache_free(), rz_kext_fill_text_range(), rz_kext_free(), rz_rebase_info_new_from_mach0(), sections_from_mach0(), and symbols_from_mach0().
Definition at line 1008 of file bin_xnu_kernelcache.c.
References rz_bin_object_t::bin_obj, rz_bin_object_t::boffset, ensure_kexts_initialized(), i, map(), NULL, rz_bin_file_t::o, prot2perm(), rz_xnu_kernelcache_obj_t::rebased_buf, rz_bin_map_free(), rz_list_append(), rz_list_newf(), RZ_MIN, RZ_NEW0, rz_str_filter(), rz_str_ncpy(), rz_str_newf(), strdup(), and VFILE_NAME_REBASED.
|
static |
Definition at line 1451 of file bin_xnu_kernelcache.c.
References i, mig_index, NULL, num, RZ_MIG_INDEX_LEN, sdb_ht_insert(), and sdb_ht_new().
Referenced by resolve_mig_subsystem().
Definition at line 964 of file bin_xnu_kernelcache.c.
References rz_bin_addr_t::bits, rz_bin_addr_t::hpaddr, NULL, rz_bin_addr_t::paddr, RZ_NEW0, type, rz_bin_addr_t::type, _RKext::vaddr, and rz_bin_addr_t::vaddr.
Referenced by entries(), and process_constructors().
|
static |
Definition at line 389 of file bin_xnu_kernelcache.c.
References rz_xnu_kernelcache_parsed_pointer_t::address, and rz_xnu_kernelcache_parse_pointer().
|
static |
Definition at line 906 of file bin_xnu_kernelcache.c.
References rz_bin_symbol_t::bind, rz_xnu_kernelcache_obj_t::cache_buf, calloc(), count, rz_bin_symbol_t::forwarder, free(), get_sections(), i, K_RPTR, MACH0_(), rz_bin_symbol_t::name, newEntry(), NULL, rz_bin_symbol_t::paddr, prefix, RZ_BIN_ENTRY_TYPE_FINI, RZ_BIN_ENTRY_TYPE_INIT, rz_buf_read_at(), RZ_K_CONSTRUCTOR_TO_ENTRY, RZ_K_CONSTRUCTOR_TO_SYMBOL, rz_list_append(), RZ_NEW0, rz_str_newf(), sections(), rz_bin_symbol_t::size, type, rz_bin_symbol_t::type, ut64(), and rz_bin_symbol_t::vaddr.
|
static |
Definition at line 801 of file bin_xnu_kernelcache.c.
References bytes, rz_xnu_kernelcache_obj_t::cache_buf, create_initterm_syms(), get_sections(), i, K_RPTR, MACH0_(), NULL, RZ_BIN_ENTRY_TYPE_FINI, RZ_BIN_ENTRY_TYPE_INIT, rz_buf_read_at(), RZ_FREE, RZ_NEWS0, sections(), and ut64().
Referenced by symbols().
|
static |
Definition at line 1467 of file bin_xnu_kernelcache.c.
References addr, rz_bin_symbol_t::bind, rz_xnu_kernelcache_obj_t::cache_buf, test_evm::end, rz_bin_symbol_t::forwarder, found, get_sections(), i, setup::idx, K_MIG_MAX_ROUTINES, K_MIG_ROUTINE_SIZE, K_MIG_SUBSYSTEM_SIZE, K_PPTR, key, MACH0_(), malloc(), mig_hash_new(), rz_bin_symbol_t::name, NULL, num, rz_bin_symbol_t::paddr, rz_bin_symbol_free(), rz_buf_read_at(), RZ_FREE, rz_list_append(), rz_list_free(), rz_list_newf(), RZ_NEW0, rz_read_le32(), rz_read_le64(), rz_str_newf(), sdb_fmt(), sdb_ht_find(), sdb_ht_free(), sections(), rz_bin_symbol_t::size, rz_bin_symbol_t::type, ut64(), and rz_bin_symbol_t::vaddr.
Referenced by symbols().
|
static |
Definition at line 1306 of file bin_xnu_kernelcache.c.
References addr, rz_bin_symbol_t::bind, rz_xnu_kernelcache_obj_t::cache_buf, test_evm::end, rz_bin_symbol_t::forwarder, get_sections(), i, IS_KERNEL_ADDR, K_PPTR, MACH0_(), malloc(), rz_bin_symbol_t::name, rz_syscall_item_t::name, NULL, rz_bin_symbol_t::paddr, rz_bin_symbol_free(), rz_buf_read_at(), RZ_FREE, rz_list_append(), rz_list_free(), rz_list_newf(), RZ_NEW0, rz_read_le64(), rz_str_newf(), rz_syscall_free(), rz_syscall_get(), rz_syscall_item_free(), rz_syscall_new(), rz_syscall_setup(), sdb_count(), sections(), rz_bin_symbol_t::size, syscall, rz_bin_symbol_t::type, ut64(), rz_bin_symbol_t::vaddr, and x.
Referenced by symbols().
|
static |
Definition at line 1804 of file bin_xnu_kernelcache.c.
References rz_xnu_kernelcache_obj_t::cache_buf, rz_xnu_kernelcache_obj_t::kexts, MACH0_(), mach0_free(), NULL, rz_xnu_kernelcache_obj_t::prelink_info, rz_xnu_kernelcache_obj_t::rebase_info, rz_buf_free(), rz_cf_value_dict_free(), RZ_FREE, rz_kext_index_free(), and rz_rebase_info_free().
Referenced by destroy().
|
static |
Definition at line 659 of file bin_xnu_kernelcache.c.
References get_sections(), i, MACH0_(), NULL, rz_xnu_kernelcache_file_range_t::offset, RZ_FREE, sections(), rz_xnu_kernelcache_file_range_t::size, _RKext::text_range, and _RKext::vaddr.
Referenced by carve_kexts(), filter_kexts(), and kexts_from_load_commands().
|
static |
Definition at line 640 of file bin_xnu_kernelcache.c.
References MACH0_(), mach0_free(), _RKext::name, NULL, and RZ_FREE.
Referenced by carve_kexts(), filter_kexts(), kexts_from_load_commands(), and rz_kext_index_free().
|
static |
Definition at line 720 of file bin_xnu_kernelcache.c.
References _RKextIndex::entries, i, _RKextIndex::length, NULL, RZ_FREE, rz_kext_free(), and rz_kext_index_foreach.
Referenced by rz_kernel_cache_free().
|
static |
Definition at line 688 of file bin_xnu_kernelcache.c.
References _RKextIndex::entries, i, _RKextIndex::length, length, malloc(), NULL, RZ_FREE, rz_list_length(), and RZ_NEW0.
Referenced by ensure_kexts_initialized().
|
static |
Definition at line 736 of file bin_xnu_kernelcache.c.
References _RKextIndex::entries, _RKextIndex::length, NULL, rz_xnu_kernelcache_file_range_t::size, entry::size, _RKext::text_range, and _RKext::vaddr.
Referenced by symbols_from_stubs().
|
static |
Definition at line 395 of file bin_xnu_kernelcache.c.
References K_PPTR, rz_read_le64(), and ut64().
|
static |
Definition at line 1919 of file bin_xnu_kernelcache.c.
References info(), NULL, and RZ_FREE.
Referenced by rz_kernel_cache_free().
|
static |
Definition at line 1839 of file bin_xnu_kernelcache.c.
References bytes, get_sections(), i, rz_xnu_kernelcache_rebase_info_t::kernel_base, MACH0_(), rz_xnu_kernelcache_rebase_info_t::multiplier, rz_xnu_kernelcache_rebase_info_t::n_ranges, NULL, rz_xnu_kernelcache_file_range_t::offset, rz_xnu_kernelcache_rebase_info_t::ranges, rz_buf_read_at(), RZ_FREE, RZ_MIN, RZ_NEW0, RZ_NEWS0, rz_read_le32(), rz_str_ncpy(), sections(), rz_xnu_kernelcache_file_range_t::size, ut64(), and UT64_MAX.
Definition at line 1048 of file bin_xnu_kernelcache.c.
References rz_bin_object_t::bin_obj, rz_bin_object_t::boffset, rz_xnu_kernelcache_obj_t::cache_buf, ensure_kexts_initialized(), eprintf, i, rz_bin_section_t::is_segment, rz_xnu_kernelcache_obj_t::kexts, MH_MAGIC_64, _RKext::name, rz_bin_section_t::name, NULL, rz_bin_file_t::o, rz_xnu_kernelcache_file_range_t::offset, rz_bin_section_t::paddr, rz_bin_section_t::perm, prot2perm(), _RKext::range, rz_bin_section_free(), rz_buf_read_at(), rz_kext_index_foreach, rz_list_append(), rz_list_newf(), RZ_MIN, RZ_NEW0, rz_read_le32(), rz_str_filter(), rz_str_ncpy(), rz_str_newf(), sections_from_mach0(), rz_bin_section_t::size, rz_bin_section_t::vaddr, and rz_bin_section_t::vsize.
Referenced by carve_kexts(), get_prelink_info_range_from_mach0(), get_stubs_info(), process_constructors(), process_kmod_init_term(), resolve_mig_subsystem(), resolve_syscalls(), rz_kext_fill_text_range(), rz_rebase_info_new_from_mach0(), and sections_from_mach0().
|
static |
Definition at line 1119 of file bin_xnu_kernelcache.c.
References addr, rz_bin_object_t::boffset, rz_bin_section_t::format, free(), get_sections(), handle_data_sections(), i, K_PPTR, len, MACH0_(), rz_bin_section_t::name, NULL, rz_bin_file_t::o, rz_bin_section_t::paddr, rz_bin_section_t::perm, prefix, rz_list_append(), RZ_NEW0, rz_str_newf(), sections(), rz_bin_section_t::size, rz_bin_section_t::vaddr, and rz_bin_section_t::vsize.
Referenced by sections().
Definition at line 1170 of file bin_xnu_kernelcache.c.
References rz_bin_object_t::bin_obj, rz_xnu_kernelcache_obj_t::cache_buf, rz_bin_symbol_t::dname, ensure_kexts_initialized(), eprintf, rz_list_t::free, kext_short_name(), rz_xnu_kernelcache_obj_t::kexts, key, MH_MAGIC_64, rz_bin_symbol_t::name, NULL, rz_bin_file_t::o, rz_xnu_kernelcache_file_range_t::offset, PFMT64x, process_constructors(), process_kmod_init_term(), _RKext::range, resolve_mig_subsystem(), resolve_syscalls(), rz_bin_symbol_free(), rz_buf_read_at(), RZ_FREE, RZ_K_CONSTRUCTOR_TO_SYMBOL, rz_kext_index_foreach, rz_list_append(), rz_list_free(), rz_list_length(), rz_list_newf(), rz_read_le32(), sdb_fmt(), sdb_ht_free(), sdb_ht_insert(), sdb_ht_new(), symbols_from_mach0(), symbols_from_stubs(), ut64(), and rz_bin_symbol_t::vaddr.
Referenced by symbols_from_mach0().
|
static |
Definition at line 1251 of file bin_xnu_kernelcache.c.
References addr, rz_bin_symbol_t::bind, rz_bin_object_t::boffset, rz_bin_symbol_t::classname, rz_bin_symbol_t::dname, rz_bin_symbol_t::forwarder, get_symbols(), i, IS_UPPER, MACH0_(), rz_bin_symbol_t::name, rz_bin_file_t::o, rz_bin_symbol_t::ordinal, p, rz_bin_symbol_t::paddr, rz_bin_demangle(), RZ_BIN_MACH0_SYMBOL_TYPE_LOCAL, rz_list_append(), RZ_NEW0, rz_bin_symbol_t::size, strdup(), symbols(), rz_bin_symbol_t::type, and rz_bin_symbol_t::vaddr.
Referenced by symbols().
|
static |
Definition at line 1629 of file bin_xnu_kernelcache.c.
References addr, rz_bin_symbol_t::bind, rz_xnu_kernelcache_obj_t::cache_buf, ensure_kexts_initialized(), extract_addr_from_code(), rz_bin_symbol_t::forwarder, found, get_stubs_info(), kext_short_name(), rz_xnu_kernelcache_obj_t::kexts, key, level, rz_bin_symbol_t::name, rz_xnu_kernelcache_file_range_t::offset, rz_bin_symbol_t::ordinal, rz_xnu_kernelcache_obj_t::pa2va_exec, rz_bin_symbol_t::paddr, PFMT64x, _RKext::range, rz_buf_read_at(), RZ_FREE, rz_kext_index_vget(), rz_list_append(), RZ_NEW0, rz_str_newf(), sdb_fmt(), sdb_ht_find(), rz_xnu_kernelcache_file_range_t::size, rz_bin_symbol_t::size, _RStubsInfo::stubs, rz_bin_symbol_t::type, ut64(), UT64_MAX, _RKext::vaddr, and rz_bin_symbol_t::vaddr.
Referenced by symbols().
Definition at line 988 of file bin_xnu_kernelcache.c.
References rz_bin_object_t::bin_obj, rz_bin_virtual_file_t::buf, rz_bin_virtual_file_t::buf_owned, rz_bin_virtual_file_t::name, NULL, rz_bin_file_t::o, rz_xnu_kernelcache_obj_t::rebased_buf, rz_bin_virtual_file_free(), rz_list_newf(), rz_list_push(), RZ_NEW0, rz_return_val_if_fail, strdup(), and VFILE_NAME_REBASED.
RzLibStruct rizin_plugin |
Definition at line 1949 of file bin_xnu_kernelcache.c.
RzBinPlugin rz_bin_plugin_xnu_kernelcache |
Definition at line 1932 of file bin_xnu_kernelcache.c.