模板功能以操纵内存

Template Function to manipulate memory

本文关键字:操纵 内存 功能      更新时间:2023-10-16

我正在修改游戏的内存,因此我要做这样的事情:

*(float*)0x89635637 = 10.0f;

现在,我想将其转变为模板功能,该功能使我只用一次编写地址来读取和设置内存,我想到了这样的事情:

template <typename Variable> Variable GetSetAddress(Variable address, Variable value = NULL)
{
    if (value != NULL)
        *(Variable*)address = value;
    return *(Variable*)address;
}

现在我尝试这样称呼:

float value = GetSetAddress<float>(0x89635637, 10.0f);

,但它给了我这个错误:

错误c2440:'类型cast':无法从" float"转换为'float *'

我对使用模板的经验不足,因此,如果你们中的一个可以将我指向正确的方向,我将很感激。预先感谢!

valueNULL进行比较是没有意义的,因为在这种情况下,valuefloat。此外,address参数不应是Variable,它应该是可以存储指针值的积分类型,例如std::uintptr_t

template <typename T> T GetSetAddress(std::uintptr_t address, T value)
{
    *(T*)address = value;
    return *(T*)address;
}

通常也最好避免使用C风格的铸件。您可以改用reinterpret_cast,并简化返回语句:

template <typename T> T GetSetAddress(std::uintptr_t address, T value)
{
    *reinterpret_cast<T*>(address) = value;
    return value;
}