Перейти к содержанию

VDV

Пользователи
  • Постов

    93
  • Зарегистрирован

  • Посещение

Весь контент VDV

  1. Необходимо просканировать памать с помощью функции "FindPattern" массив байт "01 55 B1 FF 12 B3" и вернуть не один найденный адрес , а все адреса, которые нашлись при скане указанного массива , как это сделать? bool DataCompare ( BYTE* pData ,const BYTE* pattern , const char* mask) { for (;*mask; ++mask , ++pData , ++pattern) if (*mask == 'x' && *pData != *pattern) return false; return (*mask) == NULL; } DWORD FindPattern (DWORD start_address , DWORD lenght , BYTE* pattern , char *mask) { for (DWORD i = 0; i<lenght; i++) if (DataCompare (ReadMemory<BYTE*>(start_address + i), pattern , mask)) return (DWORD)(start_address +i); return NULL; } думаю информацию дал полную...
  2. через директ Х вроде бы все рисую - там стандартный вывод был sprintf( cFrameRate, "Framerate: %d", int( fFps ) ); я заменил на свой FPSText(10, 120, SKYBLUE,dMenu.pFont, "%d",int(fFps));
  3. Причем сдесь название игры и версия???? Подсчет ФПС это общее - для всех игр подходит , поставить этот код на вормс3д или же на КС - одно и тоже , суть проблемы не в том , суть проблемы в коде ,а имеено FPSText(10, 120, SKYBLUE,dMenu.pFont, "%d",int(fFps)); при выводе на экран значения ФПС. С помощью какой функции я вывожу значения на экран???? void FPSText(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString2, ... ) { char buf[1024]; RECT FontRect = { x, y, x+800, y+50 };//500 30 va_list vaList; va_start(vaList, pString2); vsprintf_s(buf, pString2, vaList); va_end(vaList); pFont->DrawText( NULL, buf, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col); } Игра фаркрай, какую еще инфу предоставить????
  4. Немного изменил исходный код под себя float fFps = 0; // переменная для основного ФПС float fLastTickCount = 0;// - переменная последнего отсчета float fCurrentTickCount; // переменная не знаю как правильно объяснить char cFrameRate[50] = {NULL}; - убрал char *cFps() - сама функция { fCurrentTickCount = clock() * 0.001f;// время на компе * 0.001. ++fFps; переменная ФПС +1 if((fCurrentTickCount - fLastTickCount) > 1.0f) { fLastTickCount = fCurrentTickCount; FPSText(10, 120, SKYBLUE,dMenu.pFont, "%d",int(fFps)); // все парвильно выводит -НО значение мерцает постоянно, в чем проблема объясните пожалуйста //sprintf( cFrameRate, "Framerate: %d", int( fFps ) ); - убрал fFps = 0; } return cFrameRate; }
  5. есть массив байт 00 15 31 A8 B5 FF(к примеру) Необходимо создать цикл , который будет находить все адреса по этому массиву байт и приплюсовывать смещение "+20"(однократно) к найденным адресам, а затем найденные адреса со смещение "+ 20" постоянно(цикл) приравнивать к значению , адреса 0х1452AB. (к примеру) Такое возможно сделать или нет? помогите кто чем сможет. Использовал функции чтения и запись в память "Кодера" template<class T> T ReadMemory (DWORD address) { static char buffer [1024]; HANDLE proc_handle = OpenProcess (PROCESS_ALL_ACCESS , false , pID); if (!ReadProcessMemory(proc_handle , (LPCVOID)address , &buffer , sizeof(buffer), NULL)) CloseHandle (proc_handle); return reinterpret_cast<T> (buffer); } template<class T> void WriteMemory (DWORD address , T value) { HANDLE proc_handle = OpenProcess (PROCESS_ALL_ACCESS , false , pID); if (!WriteProcessMemory(proc_handle , (LPVOID)address , &value , sizeof(value), NULL)) CloseHandle (proc_handle); }
  6. Грубо говоря пишу "ESP box" , столкнулся с проблемой перевода 3д координат в экранные 2д , скопипастить у кого-то не понимая как это работает одно , а разобраться в этом самому , пускай и с помощью других умных людей другое. Нашел пример кода на одном сайте , естественно ничего не понял , просьба помочь разобраться, исправить мои комменты, если это вообще то что нужно , если есть способы по-проще просьба исправить меня : bool WorldToScreen(Vector3D World, float *ScreenX, float *ScreenY)- сама функция с аргументами, не совсем понятно , что входит "Vector3D" { Vector3D Position = VectorSubtract(World, RefDef->Origin); - не совсем понятно что входит в "VectorSubtract" Vector3D Transform; переменная трансформации 3д координат Transform.x = DotProduct(Position, RefDef->viewAxis[1]); - трансформация координаты х , не совсем понятны аргументы Transform.y = DotProduct(Position, RefDef->viewAxis[2]);- трансформация координаты y , не совсемпонятны аргументы Transform.z = DotProduct(Position, RefDef->viewAxis[0]); - трансформация координаты z , не совсемпонятны аргументы //дальше вообще не пойму if (Transform.z < 0.1f) return false; Vector2D Center = Vector2D((float)RefDef->Width * 0.5f, (float)RefDef->Height * 0.5f); отцентровка 2д координат как я понял , прошу объяснить подсчет экранных координат *ScreenX = Center.x * (1 - (Transform.x / RefDef->fov.x / Transform.z)); *ScreenY = Center.y * (1 - (Transform.y / RefDef->fov.y / Transform.z)); return true; }
  7. Необходимо подсчитать и вывести на экран FPS в моём directx меню, помогите с исходным кодом разобраться нашел какой-никой исходник, работает он конечно некорректно,помогите его доработать: DWORD FrameCnt; // кол-во кадров float TimeElapsed; // промежуток времени float FPS; // наш фпс float oldTime; float newTime; float deltatime; FrameCnt++; // c каждым кадром увеличивается на 1, т.е. это кол-во кадров кот. мы разделим на промежуток времени newTime = GetTickCount(); // записываем в ньютайм время после всех выполненных операциях deltatime = newTime - oldTime; // узнаем сколько времени проходит от начала до конца TimeElapsed += deltatime; // и прибавляем эту разницу к таймэлапседу if(TimeElapsed >= 500.0) // если в таймэлапседе накопилось 0.5 сек, то { FPS = 1000*(float)FrameCnt / TimeElapsed; // делим кол-во кадров прошедшее за полсекунды на таймэлапсед(равный примерно 0.5 сек) TimeElapsed = 0.0f; // обнуляем таймэлапсед, для следующего подсчета FrameCnt = 0; // и обнуляем кол-во кадров } p.s. украл с киберфорума
  8. Необходимо подсчитать и вывести на экран FPS в моём directx меню, помогите с исходным кодом разобраться нашел какой-никой исходник, работает он конечно некорректно,помогите его доработать: DWORD FrameCnt; // кол-во кадров float TimeElapsed; // промежуток времени float FPS; // наш фпс float oldTime; float newTime; float deltatime; FrameCnt++; // c каждым кадром увеличивается на 1, т.е. это кол-во кадров кот. мы разделим на промежуток времени newTime = GetTickCount(); // записываем в ньютайм время после всех выполненных операциях deltatime = newTime - oldTime; // узнаем сколько времени проходит от начала до конца TimeElapsed += deltatime; // и прибавляем эту разницу к таймэлапседу if(TimeElapsed >= 500.0) // если в таймэлапседе накопилось 0.5 сек, то { FPS = 1000*(float)FrameCnt / TimeElapsed; // делим кол-во кадров прошедшее за полсекунды на таймэлапсед(равный примерно 0.5 сек) TimeElapsed = 0.0f; // обнуляем таймэлапсед, для следующего подсчета FrameCnt = 0; // и обнуляем кол-во кадров } p.s. украл с киберфорума
  9. спасибо огромное все работает , осталось уладить пару нюансов p.s. поставить плюс так и не могу почему-то
  10. void PrintText2(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString2 ) - позиция х,у,цвет,шрифт, и строка с символами чар - не пойму на что ты намекаешь друг, добавлять еще аргумент не получается, добавить аргумент в va_list тоже , голова кругом идет ...
  11. это я понял - я сокращал колличество аргументов и все равно такая же проблема PrintText2(10, 150, SKYBLUE,dMenu.pFont, "Количество патронов = %d",ammoBytes);
  12. if ( checkbox_getState(sender)== 1 ) then твой скрипт else твой скрипт №2 end
  13. Правильно я понимаю? в %Х будет отображаться буфер 1 в хексе , а в %d будет отображаться буфер 2 в целых числах? прочитал адрес и его значение и всунул во второй буффер (ammoBytes - значения адреса патронов) тут все нормально , но в первый буффер я вообще ничего не могу всунуть , постоянно пишет много аргументов (to many arguments in function call) , что я неправильно делаю? byte* ReadMemory (DWORD address , DWORD size , DWORD pID) { static byte* bytes = new byte [size]; HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS , false , pID); ReadProcessMemory(hProcess , (void*)address , bytes , size , NULL); CloseHandle (hProcess); return bytes; } DWORD ammo = 0; byte* ammoBytes = ReadMemory (0x01668084 , sizeof(DWORD) , pID);
  14. Друг или ты меня не поймешь или я тупой сильно (скорее всего), вот смотри что у меня получается , поправь , если я не правильно что-то закомментирую. void PrintText2(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString2 ) - параметры функции вывода текста в моё меню:" х, у, цвет, вывод шрифта по-моему , сама строка в ввиде чар" { char buf[1024]; - буффер DWORD pID = GetProcessByName("Game.exe"); я получил хендл на нужный мне процесс(это не полный код) RECT FontRect = { x, y, x+500, y+30 }; - не помню для чего это va_list vaList; va_start(vaList, pString2); vsprintf_s(buf, pString2, vaList); va_end(vaList); вот это я вообще не пойму зачем , объясни пожалуйста pFont->DrawText( NULL, buf, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col); - рисование текста , аргументы: нул, буффер , автозаполнение(непомню чего), ссылка на FontRect , не знаю что это , цвет. } затем мы водим текст с заданными параметрами PrintText2(10, 150, SKYBLUE,dMenu.pFont, " патроны %X"); - х , у , цвет , вот тут не понятно , где "патроны" выводит текст в формате чар, где "%Х" выводит весь буфер в формате хекс, а мне необходимо , чтобы где по-колхозному говоря "%Х" постоянно выводило значение моего адреса (0х1652587) патрон Читаю чужую программу , получаем ammo(значение адреса патронов) byte* ReadMemory (DWORD address , DWORD size , DWORD pID) { static byte* bytes = new byte [size]; HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS , false , pID); ReadProcessMemory(hProcess , (void*)address , bytes , size , NULL); CloseHandle (hProcess); return bytes; } DWORD ammo = 0; byte* ammoBytes = ReadMemory (0x01668084 , sizeof(DWORD) , pID); p.s. почему я не могу тебя отблагодарить - пишет лимит исчерпан,хотя я не кому "спасибо" не ставил
  15. читаю память я способом Кодера byte* ReadMemory (DWORD address , DWORD size , DWORD pID) { static byte* bytes = new byte [size]; HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS , false , pID); ReadProcessMemory(hProcess , (void*)address , bytes , size , NULL); CloseHandle (hProcess); return bytes; } может нужно как ни буть приравнять char buf = я запутался...
  16. если вам не трудно помогите с исходным кодом - у меня не получается форматировать текст и задать ему значение буфера Нужно задать дополнительные параметры pString ??? что-то типа Pstring(buffer , pID , .....) или как? void PrintText(char pString[], int x, int y, D3DCOLOR col, ID3DXFont *font) { RECT FontRect = { x, y, x+500, y+30 }; font->DrawText( NULL, pString, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col); }
  17. Не судите строго изучаю directx 3 недели, с чужих исходов естественно. Собственно задача: 1. Прочитать память из другой программы , определенный адрес(адрес с моими патронами) 2. Вывести значение этого адреса в моё directх приложение(пример с фрапсом) Смысл в том , чтобы постоянно рисовать значение адреса с патронами . Как фрапс рисует значение ФПС. Начну с исходного кода , думаю так будет понятнее: 1.Получаем хендл на другой процесс(код не нужен думаю) 2.Читаем память другого процесса,возвращаем значение ввиде байт(использовал код "Кодера") byte* ReadMemory (DWORD address , DWORD size , DWORD pID) { static byte* bytes = new byte [size]; HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS , false , pID); ReadProcessMemory(hProcess , (void*)address , bytes , size , NULL); CloseHandle (hProcess); return bytes; } 3.Создаем буффер Код: WCHAR buffer [32]; 4. Функция вывода текста(основная функция с аргументами,если нужен весь код я сброшу) void PrintText(char pString[], int x, int y, D3DCOLOR col, ID3DXFont *font) { RECT FontRect = { x, y, x+500, y+30 }; font->DrawText( NULL, pString, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col); } 5. Вывод текста(правильно или нет судите сами , скорее всего нет) void TestThread() { PrintText("вот тут нужно вывести значение адреса как это сделать?",10, 150, SKYBLUE, dMenu.pFont); } 6. Выводится только текст L"%f" - не катит , в основной функции замена аргуметов void PrintText(char pString[], int x, int y, D3DCOLOR col, ID3DXFont *font) { RECT FontRect = { x, y, x+500, y+30 }; font->DrawText( NULL, pString, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col); } на void PrintText(buffer, int x, int y, D3DCOLOR col, ID3DXFont *font) { RECT FontRect = { x, y, x+500, y+30 }; font->DrawText( NULL, buffer, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col); } не катит, как решить задачу?
  18. Вот спасибо ! помог очень,очень! только ссылка не работает, я понимаю что она 2011 года,не мог ли ты подсказать где еще есть руссифицированные материалы для СЕ?
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.