Objects in memory
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
CF* 对象来自 CoreFoundation,它提供了超过 50 种对象类,如 CFString
、CFNumber
或 CFAllocator
。
所有这些类都是 CFRuntimeClass
类的实例,当调用时,它返回一个指向 __CFRuntimeClassTable
的索引。CFRuntimeClass 在 CFRuntime.h 中定义:
大多数由 ObjectiveC 运行时使用的数据在执行期间会发生变化,因此它使用内存中的一些 __DATA 段:
__objc_msgrefs
(message_ref_t
): 消息引用
__objc_ivar
(ivar
): 实例变量
__objc_data
(...
): 可变数据
__objc_classrefs
(Class
): 类引用
__objc_superrefs
(Class
): 超类引用
__objc_protorefs
(protocol_t *
): 协议引用
__objc_selrefs
(SEL
): 选择器引用
__objc_const
(...
): 类 r/o
数据和其他(希望是)常量数据
__objc_imageinfo
(version, flags
): 在图像加载期间使用:当前版本 0
;标志指定预优化的 GC 支持等。
__objc_protolist
(protocol_t *
): 协议列表
__objc_nlcatlist
(category_t
): 指向此二进制文件中定义的非延迟类别的指针
__objc_catlist
(category_t
): 指向此二进制文件中定义的类别的指针
__objc_nlclslist
(classref_t
): 指向此二进制文件中定义的非延迟 Objective-C 类的指针
__objc_classlist
(classref_t
): 指向此二进制文件中定义的所有 Objective-C 类的指针
它还使用 __TEXT
段中的一些部分来存储常量值,如果无法在此部分中写入:
__objc_methname
(C-String): 方法名称
__objc_classname
(C-String): 类名称
__objc_methtype
(C-String): 方法类型
Objective-c 使用一些混淆来编码简单和复杂类型的选择器和变量类型:
原始类型使用其类型的首字母 i
表示 int
,c
表示 char
,l
表示 long
... 并在无符号的情况下使用大写字母(L
表示 unsigned Long
)。
其他字母被使用或是特殊的数据类型,使用其他字母或符号,如 q
表示 long long
,b
表示 bitfields
,B
表示 booleans
,#
表示 classes
,@
表示 id
,*
表示 char pointers
,^
表示通用 pointers
和 ?
表示 undefined
。
数组、结构和联合使用 [
, {
和 (
选择器将是 processString:withOptions:andError:
id
编码为 @
char *
编码为 *
该方法的完整类型编码为:
返回类型 (NSString *
): 编码为 @
,长度为 24
self
(对象实例): 编码为 @
,偏移量为 0
_cmd
(选择器): 编码为 :
,偏移量为 8
第一个参数 (char * input
): 编码为 *
,偏移量为 16
第二个参数 (NSDictionary * options
): 编码为 @
,偏移量为 20
第三个参数 (NSError ** error
): 编码为 ^@
,偏移量为 24
通过选择器和编码,你可以重建该方法。
Objective-C 中的类是一个包含属性、方法指针的结构体... 可以在 源代码 中找到结构体 objc_class
:
这个类使用 isa 字段的一些位来指示有关类的信息。
然后,结构体有一个指向存储在磁盘上的 class_ro_t
结构体的指针,该结构体包含类的属性,如其名称、基本方法、属性和实例变量。
在运行时,使用一个额外的结构体 class_rw_t
,其中包含可以被更改的指针,例如方法、协议、属性...
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE) 学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)