summaryrefslogtreecommitdiff
path: root/view/sharedcache/core/ObjC.h
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2025-03-10 11:05:40 -0400
committerMason Reed <mason@vector35.com>2025-04-02 05:36:54 -0400
commit25cc02431b61097b2adfc2fbc493b648b0300c3b (patch)
treea79d9c4f4f67234d3bf9bda413e8608f479a4cc8 /view/sharedcache/core/ObjC.h
parentfa85bf28502286c4821427c5d0ed91a7ed46f8f6 (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.h65
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