|
50精币
void PlayClass::GetPlayTree(DWORD64 StartAddress,int LocalFlag)
{
if (StartAddress)
{
if (ReadMemory<BYTE>(StartAddress + 0x19) == 0)
{
shared_ptr<PlayInfo>Player(new PlayInfo);
DWORD64 PlayerObject = ReadMemory<DWORD64>(StartAddress + 0x28);
strcpy(Player->m_Name, (char*)(PlayerObject + PlayNameOffset));
if (ReadMemory<DWORD32>(StartAddress + 0x20) == LocalFlag)
{
Player->m_FlyStatus = ReadMemory<DWORD32>(PlayerObject + PlayFlyStatusOffset);
Player->m_FlyValue = ReadMemory<DWORD32>(PlayerObject + PlayFlyValueOffset) / 100;
Player->m_BestFlyValue = ReadMemory<DWORD32>(PlayerObject + PlayFlyBestValueOffset) / 100;
Player->bIsLocal = true;
}
Player->m_Flag = ReadMemory<DWORD32>(PlayerObject + PlayFlagOffset);
Player->m_Object = PlayerObject;
Player->m_Hp = ReadMemory<DWORD32>(PlayerObject + PlayHpOffset);
Player->m_BestHp = ReadMemory<DWORD32>(PlayerObject + PlayBestHpOffset);
Player->m_Mp = ReadMemory<DWORD32>(PlayerObject + PlayMpOffset);
Player->m_BestMp = ReadMemory<DWORD32>(PlayerObject + PlayBestMpOffset);
Player->m_pos.m_x = ReadMemory<DWORD32>(PlayerObject + PlayXOffset);
Player->m_pos.m_y = ReadMemory<DWORD32>(PlayerObject + PlayYOffset);
Player->m_pos.m_z = ReadMemory<DWORD32>(PlayerObject + PlayZOffset);
Player->m_Level = ReadMemory<DWORD32>(PlayerObject + PlayLevelOffset);
m_PlayInfo.push_back(Player);
DWORD64 TreeLeft = ReadMemory<DWORD64>(StartAddress);
GetPlayTree(TreeLeft, LocalFlag);
DWORD64 TreeRight = ReadMemory<DWORD64>(StartAddress + 0x10);
GetPlayTree(TreeRight, LocalFlag);
}
}
}
|
最佳答案
查看完整内容
看样子像是树型结构遍历,而且这种代码也好写,我也帮人写过无数遍,但是他们都有一个通病就是搞不清内存地址偏移和入参导致很多数据遍历不到、如果你能确定StartAddress,LocalFlag、而且这种代码转换也需要配合ce看看内存结构对不对、这两个参数是正确的可以联系我试试
|