Filyus писал(а):Ну если менять приоритет процесса или через таймер ставить его на паузу, то вполне можно, только не факт, что процесс вылетать не будет.
Хакер писал(а):Filyus писал(а):Ну если менять приоритет процесса или через таймер ставить его на паузу, то вполне можно, только не факт, что процесс вылетать не будет.
Приоритет не влияет на скорость выполнения. Приоритеты определяют порядок, в котором задачи будут получать квант времени. Выполняться все задачи при этом будут с равной скоростью, и время работы не будет пропорционально приоритету.
Если замораживать потоки процесса, это изменит среднюю скорость выполнения, но никак не повлияет на мгновенную. То есть если цель замедления: проследить какой-то быстро-текущий эффект, то будет облом, потому что эффект проскочит очень быстро между парой разморозка→заморозка.
Единственный способ, с хоть какой-то ценностью: это подцепляться к процессу в роли отладчика и трассировать целевой процесс. Но и здесь облом: трассировка после перехода в режим ядра невозможа (до возврата в режим пользователя). Так что процесс, который в основном вызывает системные функции, замедлить таким образом не удастся. Он будет всё время торчать в ядре, и толку от того, что мы пытаемся его трассировать.
Это всё о замедлении работы. Об ускорении работы — полный бред.
Filyus писал(а):Ну почему же... Если запустить два процесса: один с большим приоритетом, другой - с меньшим, то второму будет выделяться меньше процессорного времени.
Filyus писал(а):Заморозку можно делать не по таймеру, а по нужным функциям. Т.е., например, делать сабклассинг окна и при нужном сообщений (наприме, WM_PAINT) делать задержку. или можно замедлять всю функцию, например, glEnd для OpenGL.
Filyus писал(а):SoftIce как нельзя лучше доказывает, что отлаживать в режиме ядра МОЖНО.
Filyus писал(а):Ускорять процессы тоже можно: ппосле замедления это само собой, а ещё больше - за счёт оптимизации его функций, например, с помощью кеширования или подмены функций в системных DLL.
Хакер писал(а):Это даст грубое изменение средней скорости, но не мгновенной. Это звучит так: «как притормаживать процесс в нескольких местах», а не «как сделать, чтобы процесс выполнялся медленнее».
Хакер писал(а):Как же меня раздражает, когда начинают доказывать то, сомнений в истинности ничего никто вроде бы не высказывал.
Хакер писал(а):Единственный способ, с хоть какой-то ценностью: это подцепляться к процессу в роли отладчика и трассировать целевой процесс. Но и здесь облом: трассировка после перехода в режим ядра невозможа
Хакер писал(а):Что касается оптимизации — причём тут оптимизация? Вопрос о написании функции, которая ускорит сторонний процесс. Повторяю: и причём тут оптимизация.Что касается подмены функций в системных DLL: подробнее.
Filyus писал(а):На практике скорее всего потребуется замедление определённых функций, а не всего процесса.
Aleksandr2 писал(а):функция Speedhask, которая позволяет ускорять или замедлять исполняемый процесс.
Filyus писал(а):А здесь что тогда имелось ввиду?
Filyus писал(а):Можно оптимизировать операции ввода/вывода (кеширование запросов к сети и к жёсткому диску) или же написать собственные функции, которые часто используются программами (работа с памятью и со строками) и подменять их вызовы.
Даже сомнительно, что это можно реализовать на VB, а не то что-бы оладку в R0.Хакер писал(а):это подцепляться к процессу в роли отладчика и трассировать целевой процесс.
Вот с этим я согласен.Хакер писал(а):Но то, что я написал, невозможно. По крайней мере в рамках того набора практик и ограничений, которые, соответственно, приемлемы и действуют при решении задач подобного уровня.
ger_kar писал(а):Даже сомнительно, что это можно реализовать на VB,
С миллионом ассемблерных вставок, то может быть, а стандартными средствами вряд-ли.Хакер писал(а):Отладчик вполне себе возможен.
ger_kar писал(а):С миллионом ассемблерных вставок, то может быть, а стандартными средствами вряд-ли.
Цикл самому надо организовывать или передавать вторым параметром беконечность и ждать. Соответственно после вызова WaitForDebugEvent приложение отладчик приостановиться до получения результата. А потом обрабатывать структуру DEBUG_EVENT?Хакер писал(а):и ждём отладочные события в цикле (WaitForDebugEvent)
ger_kar писал(а):Соответственно после вызова WaitForDebugEvent приложение отладчик приостановиться до получения результата. А потом обрабатывать структуру DEBUG_EVENT?
CE has 2 different types of speedhack. The old one and the new one.
The old one is located in speedhack.pas of the cehook project (cehook.dll) When it gets activated it uses a simple hook on those functions (just place with a hook and never even bother calling the original function) It then starts a very high priority thread in the game which will increase time counters for itself using timed sleeping. The speed the time increments with is determined by the speed variable
When the game then calls those functions, it just fetches the emulated timer functions and passes it to the caller.
The new one is a bit more complex, but less prone to bugs because of a too low sleeptime, or too high, and no thread that counts time for you.
The source for this is located in speedhack2.pas in the main program, and the separate speedhack project The speedhack.dll gets injected into the target process and the dll itself has some exports, like speed, addresses of original functions, and an initialize speedhack routine
Here the hooking and controlling takes place from CE's side and it's auto assembler functions. What it does is it first uses the API hook template script on the to hook functions. This results in a script that can be used to hook the functions and fills in some predetermined addresses with the location to call if you want to call the original function (thats what the exports for the original functions are for)
After it's hooked the export "speed" of the dll is modified to the wanted speed and CreateRemoteThread is called with the address of the Initialize function to start start the speedhack and set a base of reference (the current time)
Then when a timer function is called it will calculate the new time based on the initial time the speedhack got started , the current time, and the speed. returned time = basetime+((currenttime-basetime)*speed)
When speed is modified the basetime itself is modified as well to make sure the time doesn't go backwards
iGrok писал(а):И вот как оно (на словах) работает
iGrok писал(а):http://wiki.cheatengine.org/index.php?t ... #Speedhack
Винюсь, перед уважаемым сообществом, - ступил.Хакер писал(а):О, так там вообще speedhack, а не неведомый speedhask. Автор два раза написал ерунду, какой позор.
iGroK, спасибо за ссылку.iGrok писал(а):Вот о чём речь в первом посте:
http://wiki.cheatengine.org/index.php?t ... #Speedhack И вот как оно (на словах) работает:
Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 46