假设我要反转一些处理所有移动客户端的游戏,并确定某些功能属于以下类型:
bool __thiscall Player::CanJump(Player *this)
我已经决定成为 Player 对象的 vtable 的成员。现在假设我想编辑该对象的 vtable 以指向我自己的 dll 注入实现,以便我可以随时跳转。我可以将其声明为
bool __fastcall CanJumpReplacement(Player *player) {
return true;
}
并用指向此函数的指针替换 Player 的 vtable 条目。这按预期工作,但为什么我要在这里使用 fastcall 约定?据我所知,Fastcall 几乎专门用于此目的,但我正在阅读调用约定,而 cdecl 似乎比 fastcall 更接近 thiscall。两种调用约定都成功地替换了该函数。