diff options
| author | kat <kat@vector35.com> | 2025-07-06 15:05:01 -0400 |
|---|---|---|
| committer | kat <kat@vector35.com> | 2025-07-07 07:37:23 -0400 |
| commit | 768f7c78465fb93936e5ca50a0ca712664fe54e7 (patch) | |
| tree | 78c73e0022d6006882e365a257595a5b55a37432 /view/kernelcache/api/kernelcachecore.h | |
| parent | 8f3e251c42169fb4fe8db9403d900571434d88ff (diff) | |
KernelCache rewrite
Diffstat (limited to 'view/kernelcache/api/kernelcachecore.h')
| -rw-r--r-- | view/kernelcache/api/kernelcachecore.h | 149 |
1 files changed, 78 insertions, 71 deletions
diff --git a/view/kernelcache/api/kernelcachecore.h b/view/kernelcache/api/kernelcachecore.h index 2f158131..02451a3e 100644 --- a/view/kernelcache/api/kernelcachecore.h +++ b/view/kernelcache/api/kernelcachecore.h @@ -28,6 +28,34 @@ extern "C" #endif // _MSC_VER #endif // __GNUC__C + +// binaryninjacore.h is not included so we must duplicate enum types here. +#ifdef BN_TYPE_PARSER +typedef enum BNSegmentFlag +{ + SegmentExecutable = 1, + SegmentWritable = 2, + SegmentReadable = 4, + SegmentContainsData = 8, + SegmentContainsCode = 0x10, + SegmentDenyWrite = 0x20, + SegmentDenyExecute = 0x40 +} BNSegmentFlag; + +typedef enum BNSymbolType +{ + FunctionSymbol = 0, + ImportAddressSymbol = 1, + ImportedFunctionSymbol = 2, + DataSymbol = 3, + ImportedDataSymbol = 4, + ExternalSymbol = 5, + LibraryFunctionSymbol = 6, + SymbolicFunctionSymbol = 7, + LocalLabelSymbol = 8, +} BNSymbolType; +#endif + #define CORE_ALLOCATED_STRUCT(T) #define CORE_ALLOCATED_CLASS(T) \ @@ -35,101 +63,80 @@ extern "C" CORE_ALLOCATED_STRUCT(T) \ private: -#define DECLARE_KERNELCACHE_API_OBJECT_INTERNAL(handle, cls, ns) \ - namespace ns { class cls; } struct handle { ns::cls* object; } - -#define DECLARE_KERNELCACHE_API_OBJECT(handle, cls) DECLARE_KERNELCACHE_API_OBJECT_INTERNAL(handle, cls, KernelCacheCore) - -#define IMPLEMENT_KERNELCACHE_API_OBJECT(handle) \ - CORE_ALLOCATED_CLASS(handle) \ - private: \ - handle m_apiObject; \ - public: \ - typedef handle* APIHandle; \ - handle* GetAPIObject() { return &m_apiObject; } \ - private: -#define INIT_KERNELCACHE_API_OBJECT() \ - m_apiObject.object = this; + typedef struct BNBinaryView BNBinaryView; + typedef struct BNKernelCacheController BNKernelCacheController; - typedef enum BNKCViewState { - Unloaded, - Loaded, - LoadedWithImages, - } BNKCViewState; + typedef enum BNKernelCacheEntryType { + KernelCacheEntryTypePrimary, + KernelCacheEntryTypeSecondary, + KernelCacheEntryTypeSymbols, + KernelCacheEntryTypeDyldData, + KernelCacheEntryTypeStub, + } BNKernelCacheEntryType; - typedef enum BNKCViewLoadProgress { - LoadProgressNotStarted, - LoadProgressLoadingCaches, - LoadProgressLoadingImages, - LoadProgressFinished, - } BNKCViewLoadProgress; + typedef enum BNKernelCacheRegionType { + KernelCacheRegionTypeImage, + KernelCacheRegionTypeStubIsland, + KernelCacheRegionTypeDyldData, + KernelCacheRegionTypeNonImage, + } BNKernelCacheRegionType; - typedef struct BNBinaryView BNBinaryView; - typedef struct BNKernelCache BNKernelCache; + typedef struct BNKernelCacheImage { + char* name; + uint64_t headerVirtualAddress; + uint64_t headerFileAddress; + } BNKernelCacheImage; - typedef struct BNKCImageMemoryMapping { + typedef struct BNKernelCacheRegion { + BNKernelCacheRegionType regionType; char* name; uint64_t vmAddress; uint64_t size; - bool loaded; - uint64_t rawViewOffset; - } BNKCImageMemoryMapping; - - typedef struct BNKCImage { - char* name; - uint64_t headerFileAddress; - BNKCImageMemoryMapping* mappings; - size_t mappingCount; - } BNKCImage; + // NOTE: If not associated with an image this will be zero. + uint64_t imageStart; + BNSegmentFlag flags; + } BNKernelCacheRegion; - typedef struct BNKCMappedMemoryRegion { + typedef struct BNKernelCacheMappingInfo { uint64_t vmAddress; uint64_t size; - char* name; - } BNKCMappedMemoryRegion; + uint64_t fileOffset; + } BNKernelCacheMappingInfo; - typedef struct BNKCMemoryUsageInfo { - uint64_t sharedCacheRefs; - uint64_t mmapRefs; - } BNKCMemoryUsageInfo; - - typedef struct BNKCSymbolRep { + typedef struct BNKernelCacheSymbol { + BNSymbolType symbolType; uint64_t address; char* name; - char* image; - } BNKCSymbolRep; - - KERNELCACHE_FFI_API BNKernelCache* BNGetKernelCache(BNBinaryView* data); + } BNKernelCacheSymbol; - KERNELCACHE_FFI_API BNKernelCache* BNNewKernelCacheReference(BNKernelCache* cache); - KERNELCACHE_FFI_API void BNFreeKernelCacheReference(BNKernelCache* cache); + KERNELCACHE_FFI_API BNKernelCacheController* BNGetKernelCacheController(BNBinaryView* data); - KERNELCACHE_FFI_API char** BNKCViewGetInstallNames(BNKernelCache* cache, size_t* count); + KERNELCACHE_FFI_API BNKernelCacheController* BNNewKernelCacheControllerReference(BNKernelCacheController* controller); + KERNELCACHE_FFI_API void BNFreeKernelCacheControllerReference(BNKernelCacheController* controller); - KERNELCACHE_FFI_API bool BNKCViewLoadImageWithInstallName(BNKernelCache* cache, const char* name); - KERNELCACHE_FFI_API bool BNKCViewLoadImageContainingAddress(BNKernelCache* cache, uint64_t address); + KERNELCACHE_FFI_API bool BNKernelCacheControllerApplyImage(BNKernelCacheController* controller, BNBinaryView* view, BNKernelCacheImage* image); - KERNELCACHE_FFI_API bool BNKCViewIsImageLoaded(BNKernelCache* cache, uint64_t address); + KERNELCACHE_FFI_API bool BNKernelCacheControllerIsImageLoaded(BNKernelCacheController* controller, BNKernelCacheImage* image); - KERNELCACHE_FFI_API char* BNKCViewGetNameForAddress(BNKernelCache* cache, uint64_t address); - KERNELCACHE_FFI_API char* BNKCViewGetImageNameForAddress(BNKernelCache* cache, uint64_t address); + KERNELCACHE_FFI_API bool BNKernelCacheControllerGetImageAt(BNKernelCacheController* controller, uint64_t address, BNKernelCacheImage* image); + KERNELCACHE_FFI_API bool BNKernelCacheControllerGetImageContaining(BNKernelCacheController* controller, uint64_t address, BNKernelCacheImage* image); + KERNELCACHE_FFI_API bool BNKernelCacheControllerGetImageWithName(BNKernelCacheController* controller, const char* name, BNKernelCacheImage* image); - KERNELCACHE_FFI_API BNKCViewState BNKCViewGetState(BNKernelCache* cache); - KERNELCACHE_FFI_API BNKCViewLoadProgress BNKCViewGetLoadProgress(uint64_t sessionID); - KERNELCACHE_FFI_API uint64_t BNKCViewFastGetImageCount(BNBinaryView* view); + KERNELCACHE_FFI_API char** BNKernelCacheControllerGetImageDependencies(BNKernelCacheController* controller, BNKernelCacheImage* image, size_t* count); - KERNELCACHE_FFI_API BNKCSymbolRep* BNKCViewLoadAllSymbolsAndWait(BNKernelCache* cache, size_t* count); - KERNELCACHE_FFI_API void BNKCViewFreeSymbols(BNKCSymbolRep* symbols, size_t count); + KERNELCACHE_FFI_API BNKernelCacheImage* BNKernelCacheControllerGetImages(BNKernelCacheController* controller, size_t* count); + KERNELCACHE_FFI_API BNKernelCacheImage* BNKernelCacheControllerGetLoadedImages(BNKernelCacheController* controller, size_t* count); - KERNELCACHE_FFI_API BNKCImage* BNKCViewGetAllImages(BNKernelCache* cache, size_t* count); - KERNELCACHE_FFI_API void BNKCViewFreeAllImages(BNKCImage* images, size_t count); + KERNELCACHE_FFI_API void BNKernelCacheFreeImage(BNKernelCacheImage image); + KERNELCACHE_FFI_API void BNKernelCacheFreeImageList(BNKernelCacheImage* images, size_t count); - KERNELCACHE_FFI_API BNKCImage* BNKCViewGetLoadedImages(BNKernelCache* cache, size_t* count); - KERNELCACHE_FFI_API void BNKCViewFreeLoadedImages(BNKCImage* images, size_t count); + KERNELCACHE_FFI_API bool BNKernelCacheControllerGetSymbolAt(BNKernelCacheController* controller, uint64_t address, BNKernelCacheSymbol* symbol); + KERNELCACHE_FFI_API bool BNKernelCacheControllerGetSymbolWithName(BNKernelCacheController* controller, const char* name, BNKernelCacheSymbol* symbol); - KERNELCACHE_FFI_API char* BNKCViewGetImageHeaderForAddress(BNKernelCache* cache, uint64_t address); - KERNELCACHE_FFI_API char* BNKCViewGetImageHeaderForName(BNKernelCache* cache, const char* name); + KERNELCACHE_FFI_API BNKernelCacheSymbol* BNKernelCacheControllerGetSymbols(BNKernelCacheController* controller, size_t* count); + KERNELCACHE_FFI_API void BNKernelCacheFreeSymbol(BNKernelCacheSymbol symbol); + KERNELCACHE_FFI_API void BNKernelCacheFreeSymbolList(BNKernelCacheSymbol* symbols, size_t count); #ifdef __cplusplus } #endif |
