Потоки
-
В этой теме описывается что такое потоки в общих чертах
Потоками называются сущности исполняющие машинный код в участках памяти приложения, одно приложение может иметь множество одновременно работающих потоков, исполняющих код в разных местах.
У каждого потока есть стек и собственные значения в регистрах. Стек и регистры служат для временного хранения данных для удобной их обработки. Стек находится в выделенной памяти приложения и у каждого потока он свой.Потоки виртуальны, то есть они не привязаны и не ограничены количеством ядер процессора и прочим, может существовать сколько угодно потоков, пока они влезают в ограничения по памяти выделяемой для приложения.
В Cheat Engine посмотреть список работающих потоков можно в окне отладчика через меню View:
После этого появится окно отображающие потоки, у каждого потока можно развернуть выпадающий список и посмотреть на контекст этого потока, контекстом называются его регистры и флаги:
Потоки имеют числовой идентификатор по которому они могут быть найдены, закрыты, заморожены, и тому подобное.
С помощью Cheat Engine вы можете создать новый поток для выполнения своего кода. Выделим память и напишем там простую функцию, о функциях подробнее будет рассказано в следующих статьях:
Код задан, этот код берёт число 5, добавляет его к самому себе, увеличивает на 1 и вычитает из результата 4, результат записывается по адресу
08600000
. В нижнем окне показано текущее значение адреса, оно является нулевым. Что бы код выполнился нужно вызвать поток на него. Так как это функция, она имеет командуret
что бы поток вернулся после выполнения.
Для создания потока, выделите первую команду функции и в меню инструментов выберите создание потока:Вас спросят на каком адресе создать поток, если вы выделили определённую инструкцию, адрес автоматически подставится в это окно:
После этого появится окно с вопросом какой параметр задать потоку перед запуском, который попадёт в регистры. Оставьте его 0, в данном коде не нужно задавать предварительные значения регистрам:
После того как вы подтвердите создание потока, он выполнит функцию и вернётся, значение в адресе изменится:
Так как значение находится рядом с инструкциями, верхнее окно попыталось распознять в нём инструкции и создало непонятную мешанину. Для того что бы исправить отображение просто перейдите на адрес начала функции используя стрелочки на клавиатуре для точной корректировки позиции, или укажите адрес самостоятельно нажав
Ctrl+G
:Создание потоков может быть автоматизировано с помощью команд скриптинга, которые рассмотрены в следующих статьях.