C++ 指针未正确返回值
我在程序中返回指针的值时遇到问题,指针的值没有被保存,当它读取时返回null 标题代码:C++ 指针未正确返回值,c++,pointers,reverse-engineering,C++,Pointers,Reverse Engineering,我在程序中返回指针的值时遇到问题,指针的值没有被保存,当它读取时返回null 标题代码: class PlayerHK : public Player { public: PlayerHK(); ULONG player_hp(); ULONG player_power(); ULONG player_hp2(); ULONG player_power2(); private: struct CPlayer { BYT
class PlayerHK : public Player {
public:
PlayerHK();
ULONG player_hp();
ULONG player_power();
ULONG player_hp2();
ULONG player_power2();
private:
struct CPlayer
{
BYTE padding[0x20];
ULONG hp;
ULONG power;
};
CPlayer *player;
};
主要代码:
PlayerHK::PlayerHK() {
player = reinterpret_cast<CPlayer*>(*reinterpret_cast<DWORD*>(0x00B1C4E5));
}
ULONG PlayerHK::player_hp() {
return player->hp; //does not return the value
}
ULONG PlayerHK::player_power() {
return player->power; //does not return the value
}
ULONG PlayerHK::player_hp2() {
player = reinterpret_cast<CPlayer*>(*reinterpret_cast<DWORD*>(0x00B1C4E5));
return player->hp; //returns the value
}
ULONG PlayerHK::player_power2() {
player = reinterpret_cast<CPlayer*>(*reinterpret_cast<DWORD*>(0x00B1C4E5));
return player->power; //returns the value
}
当我运行的程序将读取PlayerHK时,该值是否不应保存?我忘记做什么了吗?如果我理解正确,你会问为什么
player = reinterpret_cast<CPlayer*>(*reinterpret_cast<DWORD*>(0x00B1C4E5));
在构造函数中运行时将player设置为NULL,但在player_hp2或player_power2中运行时不设置为NULL
显而易见的答案是,当您构造对象时,该内存位置0x00B1C4E5保存值NULL,当您调用player_hp2或player_power2时,它保存不同的值。当构造函数运行时,可能尚未创建播放器,因此指向您正在读取的播放器的指针为空。reinterpret\u cast*reinterpret\u cast0x00B1C4E5您认为这有什么作用?我几分钟前刚刚对这个问题进行了评论。为什么要删除它并再次询问?@eerorika显然它不可移植地读取地址0x00B1C4E5处的值,并将其视为CPlayer结构的地址。0x00B1C4E5是拾取指针的地址。@user4581301我相信此代码已加载到另一个进程中,希望从主程序读取值,可能是为了作弊在一场比赛中。因此,通过对游戏进行反向工程,可以提前知道这些值的地址,但是没有其他方法可以引用它们。