五、静态类和修复完整结构
一、认识静态类
- 静态类
每一个对象都是从某一个静态类继承而来的,基类存在UObject的Class成员中。那么通过这个字段我们就可以判断当前对象是什么类。
知道什么什么类之后,我们就可以对应处理。
1 | auto obj = GetStaticClass(); |
其实我们修结构,就是在修这些静态类。(之所以从对象去修,是因为对象是已经实例化了这个类,类的每个字段已经存在了数据,这样更利于我们修结构,当我们把一些字段修完后,再去修一些基类固定的结构。)
二、修复完整结构
- 修复UStruct
上节课已经把UStruct修了个90%,这次直接把他修完整。在ObjectsDump.txt中找到基类。(基类都是Class CoreObject.xxxxxx命名)
地址更新到我们上节课修复好的结构中。
可以看到基类的PropertiesSize是152的大小,但是我们现在的大小是104,所以我们需要把我们的类给完善。
然后因为我们上节课没有修复SuperField,现在来修复一下,通过结构可知,UStruct继承了UField类。
1 | class UStruct : public UField |
由于当前我们查看的是UStruct
的静态类,UStruct
继承了UField
的静态类,我们直接在周围查看UField的静态地址。
- 修复UFunction
同样把UFunction
基类地址扔进Reclass。
可以看到PropertiesSize
是200的大小,将当前类大小进行修复。
- 修复UClass
由于UClass是继承UStruct,直接,按照同样的操作修复。
- 修复UStructProperty
由于UStructProperty
是继承UStruct
,直接,按照同样的操作修复。
- 修复UProperty
类似这种结构,需要找到一个对应类型的对象,扔到CE或者ReClass查看。
1 | class UStructProperty : public UProperty |
比如
修到下边这个。