Не сильно разбираюсь за доту, но в кс2 можно получить через виртуальную функцию.я получил CNetworkGameClient, через CNetworkClientService, как с CNetworkGameClient получить CGlobalVars?
не особо шарю за полный функционал рекласса, до этого как то дампом с дебагером обходился, можешь по подробнее?Не сильно разбираюсь за доту, но в кс2 можно получить через виртуальную функцию.
Открой рекласс и посмотри vfptr класса, там можно сделать из него vtable поинтер, и там попробуй найти поинтер на глобл варс, а лучше просто найди поинтер где нибудь в другом месте.
GlobalVarsWarningFunc:
$ ==> | 40:53 | push rbx
$+2 | 48:83EC 20 | sub rsp,20
$+6 | 6548:8B0425 58000000 | mov rax,qword ptr gs:[58]
$+F | 8BD9 | mov ebx,ecx
$+11 | 8B15 5988B403 | mov edx,dword ptr ds:[7FFF6383C2E0]
$+17 | B9 40000000 | mov ecx,40
$+1C | 48:8B14D0 | mov rdx,qword ptr ds:[rax+rdx*8]
$+20 | 8B0411 | mov eax,dword ptr ds:[rcx+rdx]
$+23 | 3905 CFBA9C03 | cmp dword ptr ds:[7FFF636BF568],eax
$+29 | 7F 3E | jg client.7FFF5FCF3AD9
$+2B | 803D C2BA9C03 00 | cmp byte ptr ds:[7FFF636BF564],0
$+32 | 74 2F | je client.7FFF5FCF3AD3
$+34 | 85DB | test ebx,ebx
$+36 | 74 18 | je client.7FFF5FCF3AC0
$+38 | 83FB 01 | cmp ebx,1
$+3B | 75 26 | jne client.7FFF5FCF3AD3
$+3D | 48:8D0D D4C35702 | lea rcx,qword ptr ds:[7FFF6226FE88] | 00007FFF6226FE88:"gpGlocals->curtime() called while IsInSimulation() is false\n"
$+44 | 48:83C4 20 | add rsp,20
$+48 | 5B | pop rbx
$+49 | 48:FF25 30DA9901 | jmp qword ptr ds:[<&Warning>]
$+50 | 48:8D0D 81C35702 | lea rcx,qword ptr ds:[7FFF6226FE48] | 00007FFF6226FE48:"gpGlocals->rendertime() called while IsInSimulation() is true\n"
$+57 | 48:83C4 20 | add rsp,20
$+5B | 5B | pop rbx
$+5C | 48:FF25 1DDA9901 | jmp qword ptr ds:[<&Warning>]
$+63 | 48:83C4 20 | add rsp,20
$+67 | 5B | pop rbx
$+68 | C3 | ret
$+69 | 48:8D0D 88BA9C03 | lea rcx,qword ptr ds:[7FFF636BF568]
$+70 | E8 A7B68D01 | call client.7FFF615CF18C
$+75 | 833D 7CBA9C03 FF | cmp dword ptr ds:[7FFF636BF568],FFFFFFFF
$+7C | 75 AD | jne client.7FFF5FCF3A9B
$+7E | FF15 BCDF9901 | call qword ptr ds:[<&CommandLine>]
$+84 | 45:33C0 | xor r8d,r8d
$+87 | 48:8BC8 | mov rcx,rax
$+8A | 48:8B10 | mov rdx,qword ptr ds:[rax]
$+8D | 4C:8B4A 30 | mov r9,qword ptr ds:[rdx+30]
$+91 | 48:8D15 28C35702 | lea rdx,qword ptr ds:[7FFF6226FE30] | 00007FFF6226FE30:"-curtimewarnings"
$+98 | 41:FFD1 | call r9
$+9B | 85C0 | test eax,eax
$+9D | 48:8D0D 54BA9C03 | lea rcx,qword ptr ds:[7FFF636BF568]
$+A4 | 0F9505 49BA9C03 | setne byte ptr ds:[7FFF636BF564]
$+AB | E8 0CB68D01 | call client.7FFF615CF12C
$+B0 | E9 76FFFFFF | jmp client.7FFF5FCF3A9B
$ ==> | 48:8915 89774703 | mov qword ptr ds:[7FFF6321D580],rdx | <--- gpGlobals; 7FFF6321D580 = CGlobalVars**
$+7 | 48:8D05 72DCF4FF | lea rax,qword ptr ds:[7FFF5FCF3A70] | <--- GlobalVarsWarningFunc
$+E | 48:85D2 | test rdx,rdx
$+11 | 75 1D | jne client.7FFF5FDA5E20
$+13 | 48:8D0D D6764703 | lea rcx,qword ptr ds:[7FFF6321D4E0]
$+1A | C705 24774703 8988883C | mov dword ptr ds:[7FFF6321D538],3C888889
$+24 | 48:890D 65774703 | mov qword ptr ds:[7FFF6321D580],rcx
$+2B | 48:8941 28 | mov qword ptr ds:[rcx+28],rax
$+2F | C3 | ret
$+30 | 48:8942 28 | mov qword ptr ds:[rdx+28],rax
$+34 | C3 | ret
__const:00000000004E4640 off_4E4640 dq offset __ZN22CNetworkGameClientBase4InitEv
__const:00000000004E4640 ; DATA XREF: CNetworkGameClientBase::CNetworkGameClientBase(void)+57↑o
__const:00000000004E4640 ; CNetworkGameClientBase::~CNetworkGameClientBase()+11↑o
__const:00000000004E4640 ; #STR: "/Users/buildbot/buildslave/source2_dota_rel_osx64/build/sr, "/Users/buildbot/buildslave/source2_dota_rel_osx64/build/sr, "80000"
__const:00000000004E4648 dq offset __ZN22CNetworkGameClientBase20SetGameSpawnGroupMgrEP18IGameSpawnGroupMgr ; CNetworkGameClientBase::SetGameSpawnGroupMgr(IGameSpawnGroupMgr *)
__const:00000000004E4650 dq offset __ZN22CNetworkGameClientBase6AddRefEv ; CNetworkGameClientBase::AddRef(void)
__const:00000000004E4658 dq offset __ZN22CNetworkGameClientBase7ReleaseEv ; CNetworkGameClientBase::Release(void)
__const:00000000004E4660 dq offset __ZN22CNetworkGameClientBase10GetGlobalsEv ; CNetworkGameClientBase::GetGlobals(void)
хммм а может кодер подкмал что это не глобалс а локалс и решил исправить?)именно в таком виде, с опечаткой gpGlocals там, ктото криво напечатал на клаве строку:) )
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz