diff options
| author | Mason Reed <mason@vector35.com> | 2025-03-10 11:05:40 -0400 |
|---|---|---|
| committer | Mason Reed <mason@vector35.com> | 2025-04-02 05:36:54 -0400 |
| commit | 25cc02431b61097b2adfc2fbc493b648b0300c3b (patch) | |
| tree | a79d9c4f4f67234d3bf9bda413e8608f479a4cc8 /view/sharedcache/core/ObjC.h | |
| parent | fa85bf28502286c4821427c5d0ed91a7ed46f8f6 (diff) | |
[SharedCache] Refactor Shared Cache
In absence of a better name, this commit refactors the shared cache code.
Diffstat (limited to 'view/sharedcache/core/ObjC.h')
| -rw-r--r-- | view/sharedcache/core/ObjC.h | 65 |
1 files changed, 42 insertions, 23 deletions
diff --git a/view/sharedcache/core/ObjC.h b/view/sharedcache/core/ObjC.h index 13790364..6576564b 100644 --- a/view/sharedcache/core/ObjC.h +++ b/view/sharedcache/core/ObjC.h @@ -1,52 +1,71 @@ -// -// Created by kat on 5/23/23. -// - -#ifndef SHAREDCACHE_OBJC_H -#define SHAREDCACHE_OBJC_H +#pragma once #include <binaryninjaapi.h> #include <objectivec/objc.h> #include "SharedCache.h" +struct ObjCOptimizationHeader +{ + uint32_t version; + uint32_t flags; + uint64_t headerInfoROCacheOffset; + uint64_t headerInfoRWCacheOffset; + uint64_t selectorHashTableCacheOffset; + uint64_t classHashTableCacheOffset; + uint64_t protocolHashTableCacheOffset; + uint64_t relativeMethodSelectorBaseAddressOffset; +}; + namespace DSCObjC { - class DSCObjCReader : public ObjCReader { - private: - VMReader m_reader; - size_t m_addressSize; + class SharedCacheObjCReader : public BinaryNinja::ObjCReader + { + VirtualMemoryReader m_reader; public: void Read(void* dest, size_t len) override; - std::string ReadCString() override; + + std::string ReadCString(size_t maxLength = -1) override; + uint8_t Read8() override; + uint16_t Read16() override; + uint32_t Read32() override; + uint64_t Read64() override; + int8_t ReadS8() override; + int16_t ReadS16() override; + int32_t ReadS32() override; + int64_t ReadS64() override; + uint64_t ReadPointer() override; + uint64_t GetOffset() const override; + void Seek(uint64_t offset) override; + void SeekRelative(int64_t offset) override; - VMReader& GetVMReader(); + VirtualMemoryReader& GetVMReader(); - DSCObjCReader(SharedCacheCore::SharedCache* cache, size_t addressSize); + SharedCacheObjCReader(VirtualMemoryReader reader); }; - class DSCObjCProcessor : public ObjCProcessor { + class SharedCacheObjCProcessor : public BinaryNinja::ObjCProcessor + { std::optional<uint64_t> m_customRelativeMethodSelectorBase = std::nullopt; - SharedCacheCore::SharedCache* m_cache; - std::shared_ptr<ObjCReader> GetReader() override; - void GetRelativeMethod(ObjCReader* reader, method_t& meth) override; - + std::shared_ptr<BinaryNinja::ObjCReader> GetReader() override; + + void GetRelativeMethod(BinaryNinja::ObjCReader* reader, BinaryNinja::method_t& meth) override; + public: - DSCObjCProcessor(BinaryView* data, SharedCacheCore::SharedCache* cache, bool isBackedByDatabase); - - uint64_t GetObjCRelativeMethodBaseAddress(ObjCReader* reader) override; + SharedCacheObjCProcessor(BinaryNinja::BinaryView* data, bool isBackedByDatabase); + + uint64_t GetObjCRelativeMethodBaseAddress(BinaryNinja::ObjCReader* reader) override; }; -} -#endif //SHAREDCACHE_OBJC_H +} // namespace DSCObjC |
