summaryrefslogtreecommitdiff
path: root/view/sharedcache/core/ObjC.h
diff options
context:
space:
mode:
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