From 768f7c78465fb93936e5ca50a0ca712664fe54e7 Mon Sep 17 00:00:00 2001 From: kat Date: Sun, 6 Jul 2025 15:05:01 -0400 Subject: KernelCache rewrite --- view/kernelcache/core/KernelCacheController.h | 49 +++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 view/kernelcache/core/KernelCacheController.h (limited to 'view/kernelcache/core/KernelCacheController.h') diff --git a/view/kernelcache/core/KernelCacheController.h b/view/kernelcache/core/KernelCacheController.h new file mode 100644 index 00000000..71f5e5a9 --- /dev/null +++ b/view/kernelcache/core/KernelCacheController.h @@ -0,0 +1,49 @@ +#pragma once + +#include + +#include +#include "KernelCache.h" +#include "refcountobject.h" +#include "ffi_global.h" + +DECLARE_KC_API_OBJECT(BNKernelCacheController, KernelCacheController); + +void RegisterKernelCacheControllerDestructor(); + +namespace BinaryNinja::KC { + // Represents the view state for a given `DSCache` + class KernelCacheController : public KCRefCountObject + { + IMPLEMENT_KC_API_OBJECT(BNKernelCacheController); + Ref m_logger; + KernelCache m_cache; + + // Locks on load attempts (region or image). + std::shared_mutex m_loadMutex; + + // Store the open images. + std::unordered_set m_loadedImages; + + // Settings from the view. + std::regex m_regionFilter; + + explicit KernelCacheController(KernelCache&& cache, Ref logger); + + public: + // Initialize the DSCacheView, this should be called from the view initialize function only! + static KCRef Initialize(BinaryView& view, KernelCache&& cache); + + // NOTE: This will not create one if it does not exist. To create one for the view call `Initialize`. + static KCRef FromView(const BinaryView& view); + + KernelCache& GetCache() { return m_cache; }; + const std::unordered_set& GetLoadedImages() { return m_loadedImages; }; + + // Loads the relevant image info into the view. This does not update analysis so if you + // call this make sure at some point you update analysis and likely with linear sweep. + bool ApplyImage(BinaryView& view, const CacheImage& image); + + bool IsImageLoaded(const CacheImage& image); + }; +} // namespace BinaryNinja::KC -- cgit v1.3.1