Не могу понять почему крашит когда я ставлю БП в чит енджине или в х86дбг. чтобы реверсить что функа передает приходится юзать чит енджиновский инжект в код. Даже когда атачусь визуалкой то вообще не выскакивает никакой краш или exception.
А второй вопрос, я вот пытаюсь вызвать игровую функу чтобы отрисовывать текст на экране на позиции. нашел функу по хрефам. иследовал неделю с помощью жпт.
(внутри umain.lua игры)
ну и кароче такой прикол что я супер дохуя реверсил, и вроде бы как понял что проблема в том что когдая вызвыаю мою функу которая испольузует что-то на подобии глобального стека, оно затирает игрвоой стек или игра затирает мой стэк и получается вместо нормального текста как игра отображает, у меня какая-то хуйня наполовину отрисовывается. Я не шарю в луа, я просто наугад подписовал функи в иде. Самой большой проблемой является дебагинг кода игры. Ставлю БП и сразу ловлю краш без причины без записей в визуалке. Единственные краши которые ловлю в визуалке это либо что-то со стеком (ну это проблема в конвенциах или еще каккая-то херня )
А второй вопрос, я вот пытаюсь вызвать игровую функу чтобы отрисовывать текст на экране на позиции. нашел функу по хрефам. иследовал неделю с помощью жпт.
(внутри umain.lua игры)



C++:
void CUIManager::DrawTextAt(float x, float y, int r, int g, int b, int a, const char* Text, float Duration)
{
int color = (a << 24) | (r << 16) | (g << 8) | b;
DrawTextAt(static_cast<float>(x), static_cast<float>(y), color, Text, Duration);
}
void CUIManager::DrawTextAt(float x, float y, int CLR, const char* Text, float Duration = 5.0)
{
DWORD* v17[5]{ nullptr,nullptr,nullptr,nullptr,nullptr }; // [esp+34h] [ebp-54h] BYREF
DWORD* v18[5]{ nullptr,nullptr,nullptr,nullptr,nullptr }; // [esp+48h] [ebp-40h] BYREF
DWORD* v19[5]{ nullptr,nullptr,nullptr,nullptr,nullptr }; // [esp+5Ch] [ebp-2Ch] BYREF
void* nodePtr = *(void**)GetNodePtr();
DWORD* LuaModule = nullptr;
LuaModule = LoadLuaModuleFile(v17, nodePtr, "/lua/ui/uimain.lua");
auto LuaFunc = LoadLuaFuncFromModule(LuaModule,v18,"StartCursorText");
if(!LuaFunc)
{
OutputDebugStringA("Failed to DrawText\n");
return;
}
auto result = oInitLuaState(v19, LuaFunc);
DWORD* colorObj[5] = {nullptr,nullptr,nullptr,nullptr};
oGetAsColor(colorObj, nodePtr, CLR);
void* valuesPtr = *(void**)((uintptr_t)v19+0x4);//(void*)&some;
void* Color = *(void**)((uintptr_t)colorObj + 0x10);
__asm
{
mov edi, v19
}
oDraw(
// esp
x, // 4
y, // 8
Text, // C
v19, // 10
&valuesPtr,// 14 ptr to where we can only 4
nodePtr, //18
4, //1C
Color, //20
Duration, // 24
0); // 28
this->CleanUp(v17);
this->CleanUp(v18);
this->CleanUp(v19);
return;
}
DWORD WINAPI OnInjected()
{
void* ptr = nullptr;
//UIManager
ptr = PatternScan("6A FF 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 40 A1 ?? ?? ?? ?? 53 56 8B 70 30 57 51 8B C4 89 64 24 10 8D 4C 24 14");
UIManager = *(CUIManager**)(GetAbsoluteAddress((uintptr_t)ptr+0x18,1));
SimDriver* driver = nullptr;
Sim* sim = nullptr;
bool SigFailed = false;
std::string errorMessage = "Failed to obtain:";
ptr = (void*)GetAbsoluteAddress(0x66A545);
driver = *(SimDriver**)ptr;
//MsgPtr
ptr = PatternScan("6A FF 68 A8 6C BE 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC");
if (!ptr)
{
errorMessage += "MsgPtr";
}
Console::oMsg = (Console::_Msg)ptr;
//MemAllocPtr
ptr = PatternScan("55 8B EC 83 EC 0C EB 0D FF 75 08 E8 B3 4C 01 00 85 C0 59 74 0F FF 75 08 E8 6D 57 E5");
if (ptr)
{
MemAlloc = (_MemAlloc)ptr;
}
else
{
errorMessage += ",MemAllocPtr";
}
//_UIDraw
ptr = PatternScan("6A FF 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 08 55 56 8B CF C7 44 24 18 00 00 00 00 E8");// ?? ?? ?? ?? 8B F0 56 89 74 24 0C
if (!ptr)
{
errorMessage += ",UIDraw";
}
oDraw = (_UIDraw)0x84FD90;//ptr;
//_LoadLuaModule
ptr = PatternScan("55 8B EC 6A FF 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 18 53 56 57 8B 7D 0C C7 45 E8 00 00 00 00 8B 37 89 65");// F0 56 89 75 DC E8 ?? ?? ?? ??
if (!ptr)
{
errorMessage += ",LoadLuaModule";
}
oLoadLuaModule = (_LoadLuaModule)ptr;
//_LoadLuaFunc
ptr = PatternScan("83 EC 60 53 56 8B F1 8B 46 08 33 DB 3B C3 89 74 24 0C 89 5C 24 08 75 1D 68 ?? ?? ?? ?? 8D 4C 24 1C E8 ?? ?? ?? ?? 68");// ?? ?? ?? ?? 8D 44 24 1C 50 E8 ?? ?? ?? ??
if (!ptr)
{
errorMessage += ",LoadLuaFunc";
}
oLoadLuaFunc = (_LoadLuaFunc)ptr;
//UIManager
ptr = PatternScan("6A FF 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 40 A1 ?? ?? ?? ?? 53 56 8B 70 30 57 51 8B C4 89 64 24 10 8D 4C 24 14");
if (!ptr)
{
errorMessage += ",UIManager";
}
UIManager = *(CUIManager**)(GetAbsoluteAddress((uintptr_t)ptr + 0x18, 1));
ptr = PatternScan("64 A1 00 00 00 00 6A FF 68 ?? ?? ?? ?? 50 8B 44 24 14 64 89 25 00 00 00 00 56 8B 74 24 14 50 8B CE E8"); // ?? ?? ?? ?? 8B CE C7 44 24 0C 00 00 00 00 E8 ?? ?? ?? ??
if (!ptr)
{
errorMessage += ",LoadFuncData";
}
oInitLuaState = (_LoadFuncData)0x41F910;//ptr;
oDrawTextCursor = (_DrawTextCursor)0x844840;
oGetAsColor = (_GetAsColor)0x4B9980;
oGetAsString = (_GetAsString)0x9731E0;
if (SigFailed)
{
OutputDebugStringA((errorMessage + "\n").c_str());
}
while (true)
{
if (!driver)
{
continue;
}
auto sim = driver->sim;
if (sim)
{
if (!LocalCommander)
{
LocalCommander = sim->GetLocalEntity();
if (LocalCommander)
{
UIManager->DrawTextWrapper("<LOC Engine0011>Coordinated Attack!", 0xFFFF0000, 4, 0);
auto result = nullptr;
UIManager->AddBeatFunc(result);
}
}
sim->PrintCommanders();
}
Sleep(2500);
}
return 0;
}