FishingHook.hpp - cngege/Mod GitHub Wiki
-
Actor::Actor FishingHook::FishingHook
🎡原理:
FishingHook::FishingHook
是继承于Actor的,所以FishingHook的构造函数中肯定调用了Actor构造函数🍳获取方法:
- 该构造函数有两个,按上面方法获取特征码的是其中的一个
Actor *__fastcall Actor::Actor(Actor *this, struct ILevel *a2, struct EntityContext *a3)
- 特点是一共只有三个参数
- 那些继承自Actor的生物实体类也是同理
- 由于该类的构造函数有两个
- 导致部分调用Actor::Actor的方法定位不到
- 它的另一个构造函数:
Actor *__fastcall Actor::Actor(
Actor *this,
struct ActorDefinitionGroup *a2,
const struct ActorDefinitionIdentifier *a3,
struct EntityContext *a4)
-
- 特点是它有四个参数
- 下面我们来获取定位到这个构造函数
- 首先找到三参数的Mob::Mob构造函数 结尾
- 找到 Mob::_initialize 函数位置
- 进入无生物存档
- 断点这个函数找调用
- 搭建一个铁傀儡
- 铁傀儡会调用Mob::Mob 四参数的构造函数,这期间不会调用三参数的Mob构造函数
- 找到的调用者即是 Mob::Mob 四参数的构造函数
- 该Mob::Mob继承自 四参数的Actor构造函数
- 这里我们即找到了四参数的Actor构造函数
- 现在在地图里面,准备好鱼竿,断点找调用,抛竿
- 即找到了 FishingHook 的构造函数 和虚表地址
- 虚表地址特征码:
48 8D 05 ? ? ? ? 48 89 03 C7 83 ? ? ? ? ? ? ? ? C7 83 ? ? ? ? ? ? ? ? 48 C7 83
- 构造函数特征码:
48 89 5C 24 ? 48 89 74 24 ? 48 89 4C 24 ? 57 48 83 EC ? 49 8B F9 48 8B D9 E8 ? ? ? ? 90 48 8D 05 ? ? ? ? 48 89 03 C7