mirror of
https://github.com/Alukym/VMProtect-Source.git
synced 2025-06-11 06:38:02 -05:00
Initial commit
This commit is contained in:
772
core/objc.h
Normal file
772
core/objc.h
Normal file
@ -0,0 +1,772 @@
|
||||
#ifndef OBJC_H
|
||||
#define OBJC_H
|
||||
|
||||
struct objc_module {
|
||||
uint32_t version;
|
||||
uint32_t size;
|
||||
uint32_t name;
|
||||
uint32_t symtab;
|
||||
};
|
||||
|
||||
struct objc_module_64 {
|
||||
uint32_t version;
|
||||
uint32_t size;
|
||||
uint64_t name;
|
||||
uint64_t symtab;
|
||||
};
|
||||
|
||||
struct objc_symtab {
|
||||
uint32_t sel_ref_cnt;
|
||||
uint32_t refs;
|
||||
uint16_t cls_def_cnt;
|
||||
uint16_t cat_def_cnt;
|
||||
};
|
||||
|
||||
struct objc_symtab_64 {
|
||||
uint32_t sel_ref_cnt;
|
||||
uint64_t refs;
|
||||
uint16_t cls_def_cnt;
|
||||
uint16_t cat_def_cnt;
|
||||
};
|
||||
|
||||
struct objc_class {
|
||||
uint32_t isa;
|
||||
uint32_t super_class;
|
||||
uint32_t name;
|
||||
uint32_t version;
|
||||
uint32_t info;
|
||||
uint32_t instance_size;
|
||||
uint32_t ivars;
|
||||
uint32_t methods;
|
||||
uint32_t cache;
|
||||
uint32_t protocols;
|
||||
};
|
||||
|
||||
struct objc_class_64 {
|
||||
uint64_t isa;
|
||||
uint64_t super_class;
|
||||
uint64_t name;
|
||||
uint64_t version;
|
||||
uint64_t info;
|
||||
uint64_t instance_size;
|
||||
uint64_t ivars;
|
||||
uint64_t methods;
|
||||
uint64_t cache;
|
||||
uint64_t protocols;
|
||||
};
|
||||
|
||||
struct objc_protocol {
|
||||
uint32_t isa;
|
||||
uint32_t name;
|
||||
uint32_t protocols;
|
||||
uint32_t instance_methods;
|
||||
uint32_t class_methods;
|
||||
};
|
||||
|
||||
struct objc_protocol_64 {
|
||||
uint64_t isa;
|
||||
uint64_t name;
|
||||
uint64_t protocols;
|
||||
uint64_t instance_methods;
|
||||
uint64_t class_methods;
|
||||
};
|
||||
|
||||
struct objc_method {
|
||||
uint32_t name;
|
||||
uint32_t types;
|
||||
uint32_t imp;
|
||||
};
|
||||
|
||||
struct objc_method_64 {
|
||||
uint64_t name;
|
||||
uint64_t types;
|
||||
uint64_t imp;
|
||||
};
|
||||
|
||||
struct objc_method_list {
|
||||
uint32_t next;
|
||||
uint32_t count;
|
||||
// objc_method method[1];
|
||||
};
|
||||
|
||||
struct objc_category {
|
||||
uint32_t category_name;
|
||||
uint32_t class_name;
|
||||
uint32_t instance_methods;
|
||||
uint32_t class_methods;
|
||||
uint32_t protocols;
|
||||
};
|
||||
|
||||
struct objc_category_64 {
|
||||
uint64_t category_name;
|
||||
uint64_t class_name;
|
||||
uint64_t instance_methods;
|
||||
uint64_t class_methods;
|
||||
uint64_t protocols;
|
||||
};
|
||||
|
||||
struct objc2_class {
|
||||
uint32_t isa;
|
||||
uint32_t super_class;
|
||||
uint32_t cache;
|
||||
uint32_t vtable;
|
||||
uint32_t data;
|
||||
};
|
||||
|
||||
struct objc2_class_64 {
|
||||
uint64_t isa;
|
||||
uint64_t super_class;
|
||||
uint64_t cache;
|
||||
uint64_t vtable;
|
||||
uint64_t data;
|
||||
};
|
||||
|
||||
struct objc2_class_data {
|
||||
uint32_t flags;
|
||||
uint32_t instance_start;
|
||||
uint32_t instance_size;
|
||||
uint32_t ivar_layout;
|
||||
uint32_t name;
|
||||
uint32_t base_methods;
|
||||
uint32_t base_protocols;
|
||||
uint32_t ivars;
|
||||
uint32_t weak_ivar_layout;
|
||||
uint32_t base_properties;
|
||||
};
|
||||
|
||||
struct objc2_class_data_64 {
|
||||
uint32_t flags;
|
||||
uint32_t instance_start;
|
||||
uint32_t instance_size;
|
||||
uint32_t reserved;
|
||||
uint64_t ivar_layout;
|
||||
uint64_t name;
|
||||
uint64_t base_methods;
|
||||
uint64_t base_protocols;
|
||||
uint64_t ivars;
|
||||
uint64_t weak_ivar_layout;
|
||||
uint64_t base_properties;
|
||||
};
|
||||
|
||||
struct objc2_method {
|
||||
uint32_t name;
|
||||
uint32_t types;
|
||||
uint32_t imp;
|
||||
};
|
||||
|
||||
struct objc2_method_64 {
|
||||
uint64_t name;
|
||||
uint64_t types;
|
||||
uint64_t imp;
|
||||
};
|
||||
|
||||
struct objc2_category {
|
||||
uint32_t name;
|
||||
uint32_t cls;
|
||||
uint32_t instance_methods;
|
||||
uint32_t class_methods;
|
||||
uint32_t protocols;
|
||||
uint32_t instance_properties;
|
||||
};
|
||||
|
||||
struct objc2_category_64 {
|
||||
uint64_t name;
|
||||
uint64_t cls;
|
||||
uint64_t instance_methods;
|
||||
uint64_t class_methods;
|
||||
uint64_t protocols;
|
||||
uint64_t instance_properties;
|
||||
};
|
||||
|
||||
struct objc2_protocol {
|
||||
uint32_t isa;
|
||||
uint32_t name;
|
||||
uint32_t protocols;
|
||||
uint32_t instance_methods;
|
||||
uint32_t class_methods;
|
||||
uint32_t optional_instance_methods;
|
||||
uint32_t optional_class_methods;
|
||||
uint32_t instance_properties;
|
||||
};
|
||||
|
||||
struct objc2_protocol_64 {
|
||||
uint64_t isa;
|
||||
uint64_t name;
|
||||
uint64_t protocols;
|
||||
uint64_t instance_methods;
|
||||
uint64_t class_methods;
|
||||
uint64_t optional_instance_methods;
|
||||
uint64_t optional_class_methods;
|
||||
uint64_t instance_properties;
|
||||
};
|
||||
|
||||
struct objc2_message {
|
||||
uint32_t imp;
|
||||
uint32_t name;
|
||||
};
|
||||
|
||||
struct objc2_message_64 {
|
||||
uint64_t imp;
|
||||
uint64_t name;
|
||||
};
|
||||
|
||||
class MacArchitecture;
|
||||
class MacSegment;
|
||||
|
||||
class IObjcMethod : public IObject
|
||||
{
|
||||
public:
|
||||
virtual uint64_t address() const = 0;
|
||||
virtual void GetLoadMethodReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
};
|
||||
|
||||
class IObjcMethodList : public ObjectList<IObjcMethod>
|
||||
{
|
||||
public:
|
||||
virtual void GetLoadMethodReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
};
|
||||
|
||||
class IObjcClass : public IObject
|
||||
{
|
||||
public:
|
||||
virtual uint64_t address() const = 0;
|
||||
virtual void GetLoadMethodReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
};
|
||||
|
||||
class IObjcClassList : public ObjectList<IObjcClass>
|
||||
{
|
||||
public:
|
||||
virtual void GetLoadMethodReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
};
|
||||
|
||||
class IObjcCategory : public IObject
|
||||
{
|
||||
public:
|
||||
virtual uint64_t address() const = 0;
|
||||
virtual void GetLoadMethodReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
};
|
||||
|
||||
class IObjcCategoryList : public ObjectList<IObjcCategory>
|
||||
{
|
||||
public:
|
||||
virtual void GetLoadMethodReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
};
|
||||
|
||||
class IObjcSelector : public IObject
|
||||
{
|
||||
public:
|
||||
virtual uint64_t address() const = 0;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
};
|
||||
|
||||
class IObjcSelectorList : public ObjectList<IObjcSelector>
|
||||
{
|
||||
public:
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
};
|
||||
|
||||
class IObjcProtocol : public IObject
|
||||
{
|
||||
public:
|
||||
virtual uint64_t address() const = 0;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
};
|
||||
|
||||
class IObjcProtocolList : public ObjectList<IObjcProtocol>
|
||||
{
|
||||
public:
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
};
|
||||
|
||||
class IObjcStorage : public IObject
|
||||
{
|
||||
public:
|
||||
virtual void ReadFromFile(MacArchitecture &file) = 0;
|
||||
virtual void GetLoadMethodReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const = 0;
|
||||
virtual std::vector<MacSegment *> segment_list() const = 0;
|
||||
};
|
||||
|
||||
class BaseObjcClass : public IObjcClass
|
||||
{
|
||||
public:
|
||||
BaseObjcClass(IObjcClassList *owner, uint64_t address);
|
||||
virtual ~BaseObjcClass();
|
||||
virtual uint64_t address() const { return address_; }
|
||||
private:
|
||||
IObjcClassList *owner_;
|
||||
uint64_t address_;
|
||||
};
|
||||
|
||||
class BaseObjcClassList : public IObjcClassList
|
||||
{
|
||||
public:
|
||||
virtual void AddObject(IObjcClass *object);
|
||||
virtual void GetLoadMethodReferences(std::set<uint64_t> &address_list) const;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
IObjcClass *GetClassByAddress(uint64_t address) const;
|
||||
private:
|
||||
std::map<uint64_t, IObjcClass *> map_;
|
||||
};
|
||||
|
||||
class BaseObjcMethod : public IObjcMethod
|
||||
{
|
||||
public:
|
||||
BaseObjcMethod(IObjcMethodList *owner, uint64_t address);
|
||||
virtual ~BaseObjcMethod();
|
||||
virtual uint64_t address() const { return address_; }
|
||||
private:
|
||||
IObjcMethodList *owner_;
|
||||
uint64_t address_;
|
||||
};
|
||||
|
||||
class BaseObjcMethodList : public IObjcMethodList
|
||||
{
|
||||
public:
|
||||
virtual void GetLoadMethodReferences(std::set<uint64_t> &address_list) const;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
};
|
||||
|
||||
class BaseObjcCategory : public IObjcCategory
|
||||
{
|
||||
public:
|
||||
BaseObjcCategory(IObjcCategoryList *owner, uint64_t address);
|
||||
virtual ~BaseObjcCategory();
|
||||
virtual uint64_t address() const { return address_; }
|
||||
private:
|
||||
IObjcCategoryList *owner_;
|
||||
uint64_t address_;
|
||||
};
|
||||
|
||||
class BaseObjcCategoryList : public IObjcCategoryList
|
||||
{
|
||||
public:
|
||||
virtual void GetLoadMethodReferences(std::set<uint64_t> &address_list) const;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
};
|
||||
|
||||
class BaseObjcSelector : public IObjcSelector
|
||||
{
|
||||
public:
|
||||
BaseObjcSelector(IObjcSelectorList *owner, uint64_t address);
|
||||
virtual ~BaseObjcSelector();
|
||||
virtual uint64_t address() const { return address_; }
|
||||
private:
|
||||
IObjcSelectorList *owner_;
|
||||
uint64_t address_;
|
||||
};
|
||||
|
||||
class BaseObjcSelectorList : public IObjcSelectorList
|
||||
{
|
||||
public:
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
};
|
||||
|
||||
class BaseObjcProtocol : public IObjcProtocol
|
||||
{
|
||||
public:
|
||||
BaseObjcProtocol(IObjcProtocolList *owner, uint64_t address);
|
||||
virtual ~BaseObjcProtocol();
|
||||
virtual uint64_t address() const { return address_; }
|
||||
private:
|
||||
IObjcProtocolList *owner_;
|
||||
uint64_t address_;
|
||||
};
|
||||
|
||||
class BaseObjcProtocolList : public IObjcProtocolList
|
||||
{
|
||||
public:
|
||||
IObjcProtocol *GetProtocolByAddress(uint64_t address) const;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
};
|
||||
|
||||
enum ObjcMethodType {
|
||||
mtUnknown,
|
||||
mtLoad
|
||||
};
|
||||
|
||||
class ObjcMethod : public BaseObjcMethod
|
||||
{
|
||||
public:
|
||||
ObjcMethod(IObjcMethodList *owner, uint64_t address);
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
void GetLoadMethodReferences(std::set<uint64_t> &address_list) const;
|
||||
void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
private:
|
||||
OperandSize size_;
|
||||
uint64_t name_;
|
||||
uint64_t types_;
|
||||
uint64_t imp_;
|
||||
ObjcMethodType type_;
|
||||
};
|
||||
|
||||
class ObjcMethodList : public BaseObjcMethodList
|
||||
{
|
||||
public:
|
||||
ObjcMethodList();
|
||||
ObjcMethod *item(size_t index) const;
|
||||
void ReadFromFile(MacArchitecture &file, uint64_t address);
|
||||
private:
|
||||
ObjcMethod *Add(uint64_t address);
|
||||
};
|
||||
|
||||
class ObjcClass : public BaseObjcClass
|
||||
{
|
||||
public:
|
||||
ObjcClass(IObjcClassList *owner, uint64_t address);
|
||||
~ObjcClass();
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
uint64_t isa() const { return isa_; }
|
||||
uint64_t super_class() const { return super_class_; }
|
||||
uint64_t info() const { return info_; }
|
||||
void GetLoadMethodReferences(std::set<uint64_t> &address_list) const;
|
||||
void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
private:
|
||||
OperandSize size_;
|
||||
uint64_t isa_;
|
||||
uint64_t super_class_;
|
||||
uint64_t name_;
|
||||
uint64_t version_;
|
||||
uint64_t info_;
|
||||
uint64_t instance_size_;
|
||||
uint64_t ivars_;
|
||||
uint64_t methods_;
|
||||
uint64_t cache_;
|
||||
uint64_t protocols_;
|
||||
ObjcMethodList *method_list_;
|
||||
|
||||
// no copy ctr or assignment op
|
||||
ObjcClass(const ObjcClass &);
|
||||
ObjcClass &operator =(const ObjcClass &);
|
||||
};
|
||||
|
||||
class ObjcClassList : public BaseObjcClassList
|
||||
{
|
||||
public:
|
||||
ObjcClassList();
|
||||
ObjcClass *item(size_t index) const;
|
||||
void ReadFromFile(MacArchitecture &file, size_t class_count);
|
||||
private:
|
||||
ObjcClass *Add(uint64_t address);
|
||||
};
|
||||
|
||||
class ObjcCategory: public BaseObjcCategory
|
||||
{
|
||||
public:
|
||||
ObjcCategory(IObjcCategoryList *owner, uint64_t address);
|
||||
~ObjcCategory();
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
void GetLoadMethodReferences(std::set<uint64_t> &address_list) const;
|
||||
void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
private:
|
||||
OperandSize size_;
|
||||
uint64_t category_name_;
|
||||
uint64_t class_name_;
|
||||
uint64_t instance_methods_;
|
||||
uint64_t class_methods_;
|
||||
uint64_t protocols_;
|
||||
ObjcMethodList *method_list_;
|
||||
ObjcMethodList *class_method_list_;
|
||||
|
||||
// no copy ctr or assignment op
|
||||
ObjcCategory(const ObjcCategory &);
|
||||
ObjcCategory &operator =(const ObjcCategory &);
|
||||
};
|
||||
|
||||
class ObjcCategoryList : public BaseObjcCategoryList
|
||||
{
|
||||
public:
|
||||
ObjcCategoryList();
|
||||
ObjcCategory *item(size_t index) const;
|
||||
void ReadFromFile(MacArchitecture &file, size_t category_count);
|
||||
private:
|
||||
ObjcCategory *Add(uint64_t address);
|
||||
};
|
||||
|
||||
class ObjcSelector : public BaseObjcSelector
|
||||
{
|
||||
public:
|
||||
ObjcSelector(IObjcSelectorList *owner, uint64_t address);
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
};
|
||||
|
||||
class ObjcSelectorList : public BaseObjcSelectorList
|
||||
{
|
||||
public:
|
||||
ObjcSelectorList();
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
private:
|
||||
ObjcSelector *Add(uint64_t address);
|
||||
};
|
||||
|
||||
class ObjcProtocolList;
|
||||
|
||||
class ObjcProtocol : public BaseObjcProtocol
|
||||
{
|
||||
public:
|
||||
ObjcProtocol(ObjcProtocolList *owner, uint64_t address);
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
private:
|
||||
OperandSize size_;
|
||||
uint64_t isa_;
|
||||
uint64_t name_;
|
||||
uint64_t protocols_;
|
||||
uint64_t instance_methods_;
|
||||
uint64_t class_methods_;
|
||||
};
|
||||
|
||||
class ObjcProtocolList : public BaseObjcProtocolList
|
||||
{
|
||||
public:
|
||||
ObjcProtocolList();
|
||||
ObjcProtocol *item(size_t index) const;
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
private:
|
||||
ObjcProtocol *Add(uint64_t address);
|
||||
};
|
||||
|
||||
class ObjcStorage : public IObjcStorage
|
||||
{
|
||||
public:
|
||||
ObjcStorage();
|
||||
~ObjcStorage();
|
||||
virtual void ReadFromFile(MacArchitecture &file);
|
||||
virtual void GetLoadMethodReferences(std::set<uint64_t> &address_list) const;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
virtual std::vector<MacSegment *> segment_list() const { return segment_list_; }
|
||||
private:
|
||||
ObjcClassList *class_list_;
|
||||
ObjcCategoryList *category_list_;
|
||||
ObjcSelectorList *selector_list_;
|
||||
ObjcProtocolList *protocol_list_;
|
||||
std::vector<MacSegment *> segment_list_;
|
||||
|
||||
// no copy ctr or assignment op
|
||||
ObjcStorage(const ObjcStorage &);
|
||||
ObjcStorage &operator =(const ObjcStorage &);
|
||||
};
|
||||
|
||||
class Objc2Method : public BaseObjcMethod
|
||||
{
|
||||
public:
|
||||
Objc2Method(IObjcMethodList *owner, uint64_t address);
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
virtual void GetLoadMethodReferences(std::set<uint64_t> &address_list) const;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
private:
|
||||
OperandSize size_;
|
||||
uint64_t name_;
|
||||
uint64_t types_;
|
||||
uint64_t imp_;
|
||||
ObjcMethodType type_;
|
||||
};
|
||||
|
||||
class Objc2MethodList : public BaseObjcMethodList
|
||||
{
|
||||
public:
|
||||
Objc2MethodList();
|
||||
Objc2Method *item(size_t index) const;
|
||||
void ReadFromFile(MacArchitecture &file, uint64_t address);
|
||||
private:
|
||||
Objc2Method *Add(uint64_t address);
|
||||
};
|
||||
|
||||
class Objc2Class : public BaseObjcClass
|
||||
{
|
||||
public:
|
||||
Objc2Class(IObjcClassList *owner, uint64_t address);
|
||||
~Objc2Class();
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
uint64_t isa() const { return isa_; }
|
||||
uint64_t super_class() const { return super_class_; }
|
||||
void GetLoadMethodReferences(std::set<uint64_t> &address_list) const;
|
||||
void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
private:
|
||||
OperandSize size_;
|
||||
uint64_t isa_;
|
||||
uint64_t super_class_;
|
||||
uint64_t cache_;
|
||||
uint64_t vtable_;
|
||||
uint64_t data_;
|
||||
uint32_t flags_;
|
||||
uint32_t instance_start_;
|
||||
uint32_t instance_size_;
|
||||
uint64_t ivar_layout_;
|
||||
uint64_t name_;
|
||||
uint64_t base_methods_;
|
||||
uint64_t base_protocols_;
|
||||
uint64_t ivars_;
|
||||
uint64_t protocols_;
|
||||
uint64_t weak_ivar_layout_;
|
||||
uint64_t base_properties_;
|
||||
Objc2MethodList *method_list_;
|
||||
|
||||
// no copy ctr or assignment op
|
||||
Objc2Class(const Objc2Class &);
|
||||
Objc2Class &operator =(const Objc2Class &);
|
||||
};
|
||||
|
||||
class Objc2ClassList : public BaseObjcClassList
|
||||
{
|
||||
public:
|
||||
Objc2ClassList();
|
||||
Objc2Class *item(size_t index) const;
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
private:
|
||||
Objc2Class *Add(uint64_t address);
|
||||
};
|
||||
|
||||
class Objc2Category: public BaseObjcCategory
|
||||
{
|
||||
public:
|
||||
Objc2Category(IObjcCategoryList *owner, uint64_t address);
|
||||
~Objc2Category();
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
void GetLoadMethodReferences(std::set<uint64_t> &address_list) const;
|
||||
void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
private:
|
||||
OperandSize size_;
|
||||
uint64_t name_;
|
||||
uint64_t cls_;
|
||||
uint64_t instance_methods_;
|
||||
uint64_t class_methods_;
|
||||
uint64_t protocols_;
|
||||
uint64_t instance_properties_;
|
||||
Objc2MethodList *method_list_;
|
||||
Objc2MethodList *class_method_list_;
|
||||
|
||||
// no copy ctr or assignment op
|
||||
Objc2Category(const Objc2Category &);
|
||||
Objc2Category &operator =(const Objc2Category &);
|
||||
};
|
||||
|
||||
class Objc2CategoryList : public BaseObjcCategoryList
|
||||
{
|
||||
public:
|
||||
Objc2CategoryList();
|
||||
Objc2Category *item(size_t index) const;
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
private:
|
||||
Objc2Category *Add(uint64_t address);
|
||||
};
|
||||
|
||||
class Objc2SelectorList : public BaseObjcSelectorList
|
||||
{
|
||||
public:
|
||||
Objc2SelectorList();
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
private:
|
||||
ObjcSelector *Add(uint64_t address);
|
||||
};
|
||||
|
||||
class Objc2ProtocolList;
|
||||
|
||||
class Objc2Protocol : public BaseObjcProtocol
|
||||
{
|
||||
public:
|
||||
Objc2Protocol(Objc2ProtocolList *owner, uint64_t address);
|
||||
~Objc2Protocol();
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
private:
|
||||
OperandSize size_;
|
||||
uint64_t isa_;
|
||||
uint64_t name_;
|
||||
uint64_t protocols_;
|
||||
uint64_t instance_methods_;
|
||||
uint64_t class_methods_;
|
||||
uint64_t optional_instance_methods_;
|
||||
uint64_t optional_class_methods_;
|
||||
uint64_t instance_properties_;
|
||||
Objc2MethodList *method_list_;
|
||||
|
||||
// no copy ctr or assignment op
|
||||
Objc2Protocol(const Objc2Protocol &);
|
||||
Objc2Protocol &operator =(const Objc2Protocol &);
|
||||
};
|
||||
|
||||
class Objc2ProtocolList : public BaseObjcProtocolList
|
||||
{
|
||||
public:
|
||||
Objc2ProtocolList();
|
||||
Objc2Protocol *item(size_t index) const;
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
private:
|
||||
Objc2Protocol *Add(uint64_t address);
|
||||
};
|
||||
|
||||
class Objc2MessageList;
|
||||
|
||||
class Objc2Message : public IObject
|
||||
{
|
||||
public:
|
||||
Objc2Message(Objc2MessageList *owner, uint64_t address);
|
||||
~Objc2Message();
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
private:
|
||||
Objc2MessageList *owner_;
|
||||
uint64_t address_;
|
||||
OperandSize size_;
|
||||
uint64_t imp_;
|
||||
uint64_t name_;
|
||||
};
|
||||
|
||||
class Objc2MessageList : public ObjectList<Objc2Message>
|
||||
{
|
||||
public:
|
||||
Objc2MessageList();
|
||||
void ReadFromFile(MacArchitecture &file);
|
||||
void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
private:
|
||||
Objc2Message *Add(uint64_t address);
|
||||
};
|
||||
|
||||
class Objc2Storage : public IObjcStorage
|
||||
{
|
||||
public:
|
||||
Objc2Storage();
|
||||
~Objc2Storage();
|
||||
virtual void ReadFromFile(MacArchitecture &file);
|
||||
virtual void GetLoadMethodReferences(std::set<uint64_t> &address_list) const;
|
||||
virtual void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
virtual std::vector<MacSegment *> segment_list() const { return segment_list_; }
|
||||
private:
|
||||
Objc2ClassList *class_list_;
|
||||
Objc2CategoryList *category_list_;
|
||||
Objc2SelectorList *selector_list_;
|
||||
Objc2ProtocolList *protocol_list_;
|
||||
Objc2MessageList *message_list_;
|
||||
std::vector<MacSegment *> segment_list_;
|
||||
|
||||
// no copy ctr or assignment op
|
||||
Objc2Storage(const Objc2Storage &);
|
||||
Objc2Storage &operator =(const Objc2Storage &);
|
||||
};
|
||||
|
||||
class Objc : public IObject
|
||||
{
|
||||
public:
|
||||
Objc();
|
||||
~Objc();
|
||||
bool ReadFromFile(MacArchitecture &file);
|
||||
void GetLoadMethodReferences(std::set<uint64_t> &address_list) const;
|
||||
void GetStringReferences(std::set<uint64_t> &address_list) const;
|
||||
std::vector<MacSegment *> segment_list() const;
|
||||
private:
|
||||
IObjcStorage *storage_;
|
||||
|
||||
// no copy ctr or assignment op
|
||||
Objc(const Objc &);
|
||||
Objc &operator =(const Objc &);
|
||||
};
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user