Начинающий
Начинающий
- Статус
- Оффлайн
- Регистрация
- 1 Ноя 2019
- Сообщения
- 3
- Реакции
- 0
Я только листочек в этой теме, прошу, не бейте сильно.
У меня есть вот такая функция
До крупного обновления (7.38) в доте всё работало отлично. После обновления стало происходить вот такие гадости
После этого происходит краш.
(Да, можно заметить что EntitySystem = 0, почему-то после обновления аналогично не получается найти EntitySystem (Получилось единожды после перезагрузки пк и при первом запуске игры, при последующих попытках - краш), с чем всё это связано я также без понятия, как и где искать решение проблемы)
Я не понимаю почему это и как это, если кто-то поможет мне разобарться почему так происходит и как это можно исправить, буду очень признателен
У меня есть вот такая функция
C++:
void SchemaDumpToMap(const char* _module, const char* _class) {
std::cout << "Try to dump " << _class << " from " << _module << "\n";
ui point = *(ui*)(Interfaces::Schema);
std::cout << "Point of Shema: " << point << " | "<< *(ui*)(point+0x68)<<"\n";
ui Scope = ((ui(__fastcall*)(ui schemasys, const char* _mod, char** idk))
(*(ui*)(point+0x68)))(Interfaces::Schema, _module, NULL);
if (!Scope) { std::cout<<"No such scope "<< (ui)_module<<"\n"; return; }
std::cout << "Scope addres: " << Scope << "\n";
ui result = 0;
ui Test1 = ((ui(__fastcall*)(ui scope,ui *a2, const char* _class))
(*(ui*)(*(ui*)(Scope)+0x10)))(Scope,&result, _class);
if (!result) { std::cout << "No such class "<<(ui)_class<<"\n"; return; }
std::cout << "Result: " << result << "\n";
std::ofstream myfile;
std::string filepath = "E:\\DOTA_OFFSETS\\";
filepath = filepath + _class + ".txt";
myfile.open(filepath.c_str());
ClassDescription* a = (ClassDescription*)result;
label_1: {}
std::cout << a<<" | Class name: " << (cc)a->classname << "\n";
std::string className = (cc)a->classname;
myfile << (cc)a->classname << "\n";
if (!a->memberstoiterate) myfile << "<no members>" << "\n";
for (uintptr_t i = 0; i < a->memberstoiterate; i++) {
MemberDescription* z = (MemberDescription*)(a->MemberInfo + i * 0x20);
myfile << "Member " << (const char*)z->name << " type " << (const char*)z->schematypeptr->name << " offset " << z->offset << "\n";
Netvars[className][(cc)z->name] = z->offset;
}
if (a->parent) { a = a->parent->parent; goto label_1; }
myfile.close();
}
До крупного обновления (7.38) в доте всё работало отлично. После обновления стало происходить вот такие гадости

После этого происходит краш.
(Да, можно заметить что EntitySystem = 0, почему-то после обновления аналогично не получается найти EntitySystem (Получилось единожды после перезагрузки пк и при первом запуске игры, при последующих попытках - краш), с чем всё это связано я также без понятия, как и где искать решение проблемы)
C++:
inline void InitInterfaces() {
Engine = GetInterface<IEngineClient*>("engine2.dll", "Source2EngineToClient001");
Client = GetInterface<CSource2Client*>("client.dll", "Source2Client002");
CVar = GetInterface<CVarSystem*>("tier0.dll", "VEngineCvar007");
uintptr_t* vmt_slot = [I](uintptr_t*[/I])Interfaces::Client + 25; //25th function in Source2Client vtable
std::cout << "25th function in Source2Client vtable finded "<<vmt_slot<<"\n";
uintptr_t addr_start = *vmt_slot + 3; //stores the relative address portion of the mov rax, [rip + 0x2512059] instruction
std::cout <<"addr start: "<< addr_start<< " | "<< [I](uint32_t[/I])(addr_start)<<" | "<< addr_start + [I](uint32_t[/I])(addr_start)+4 << "\n";
Entity = [I](CGameEntitySystem*[/I])(addr_start + [I](uint32_t[/I])(addr_start)+4); // краш
...
}
Я не понимаю почему это и как это, если кто-то поможет мне разобарться почему так происходит и как это можно исправить, буду очень признателен