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