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

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. Мерцает, скорее всего, потому, что, судя по всему, используются функции GDI для вывода FPS. А игра использует DirectX. Отсюда и мерцание.

    через директ Х вроде бы все рисую - там стандартный вывод был

    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. Проверь аргументы функции PrintText2..

    void PrintText2(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString2 )

    - позиция х,у,цвет,шрифт, и строка с символами чар - не пойму на что ты намекаешь друг, добавлять еще аргумент не получается, добавить аргумент в va_list тоже , голова кругом идет ...

  10. Из MSDN


    va_list vaList; //Variable argument list
    va_start(vaList, pString2); //Initialize variable arguments
    vsprintf_s(buf, pString2, vaList); //Write formatted output using a pointer to the list of arguments
    va_end(vaList); //Reset variable arguments.


    PrintText2(10, 150, SKYBLUE,dMenu.pFont, "Адрес патронов = 0x%X\nКоличество патронов = %d", ammoAddress/*Буффер 1*/, ammoValue/*Буффер 2*/);

    Правильно я понимаю? в %Х будет отображаться буфер 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);

  11. Если не ленится и поискать, можно найти ответы на все ваши вопросы. :)


    PrintText(x, y, color, pFont, "Font = 0x%X", pFont); //Выводит адрес "pFont"-а в hex виде..

    Друг или ты меня не поймешь или я тупой сильно (скорее всего), вот смотри что у меня получается , поправь , если я не правильно что-то закомментирую.

    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. почему я не могу тебя отблагодарить - пишет лимит исчерпан,хотя я не кому "спасибо" не ставил



  12. Друг не ругайся на меня сильно, но я не пойму ход мыслей твоих , так еще не совсем опытен в с++ , прошу отнестись адыкватно и объяснить как вывести значение адреса в формате флоат, не всего буфера а только нужного мне адреса , я запутался совсем.



    void PrintText(int x(позиция Х), int y(позиция У), D3DCOLOR col(цвет), LPD3DXFONT pFont(текст), const char *pString(сама строка,зачем константное значение не пойму ), ...)
    {
    char buf[1024];(выделяем буффер)
    RECT FontRect = { x, y, x+500, y+30 };(отрисовка)
    va_list vaList;(не пойму для чего это - скорее всего для передачи необходимого значения строке)

    va_start(vaList, pString);(аргументы : сам ва-лист и строка)
    vsprintf_s(buf, pString, vaList);(настройки строки получается, что мы выводим: буфер , строка )
    va_end(vaList);(тут ясно)

    pFont->DrawText( NULL, buf, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col); (что мы рисуем : ну тут главное буфер)
    }

    ........
    PrintText(x(позиция Х), y(позиция У), color(цвет), pFont(понятно), "0x(текст)%X(вот тут получается, выводит весь буфер, в формате целого числа, а как вывести не весь буфер а адрес нужный мне)");

    читаю память я способом Кодера

    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 = 

    я запутался...

  13. текст нужно еще отформатировать с помощью wsprintf, передав ей необходимое значение.

    если вам не трудно помогите с исходным кодом - у меня не получается форматировать текст и задать ему значение буфера

    Нужно задать дополнительные параметры 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);
    }

  14. Не судите строго изучаю 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);
    }

    не катит, как решить задачу?

  15. local te_health = getTableEntry("health")

    function CECheckbox1Change(sender)
    if ( checkbox_getState(sender)== 1 ) then
    memoryrecord_setValue(te_health, "100")
    memoryrecord_freeze(te_health, 0)
    else
    memoryrecord_setValue(te_health, "99")
    memoryrecord_unfreeze(te_health)
    end
    end

    Поглядывай сюда, тут могут быть подсказки о том какие функции тебе использовать. Тебе пригодиться. Когда я писал для тебя код я смотрел, только туда )

    Вот спасибо ! помог очень,очень! только ссылка не работает, я понимаю что она 2011 года,не мог ли ты подсказать где еще есть руссифицированные материалы для СЕ?

×
×
  • Создать...

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

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