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

Работа с адресами на форме changed addresses (Заготовка Lua Plagin)


MasterGH

Рекомендуемые сообщения

Как отобразить окно "Changed addresses" ?

1. Подключить процесс игры к Cheat Engine

2. Найти адрес

3. Поставить брейкпоинт и получить инструкции

4. Выбрать инструкцию и перейти в дизассемблер

5. Вызвать меню как на скриншоте ("определение проскакивающих адресов")

post-3-0-07626200-1427051641_thumb.png

6. Перейти в игру и увидеть адреса, которые прерывались на инструкции

post-3-0-34646100-1427053435_thumb.png

 

Зачем нужно окно "Changed addresses" ?

1. Окно "Changed addresses" показывает информацию об адресах, с которыми сработала дизассемблированная инструкция. 

2. Если один адрес проскакивает, значит инъекция кода будет работать с одним адресом. 

3. Если несколько адресов проскакивает, то инъекция кода бдет работать с несколькими адресами.

4. В окне "Changed addresses" есть множество функций контекстного меню.

post-3-0-04077700-1427052259_thumb.png

Наиболее важная первая функция, которая позволит увидеть регистры CPU, FPU, SIMD, а также стек.

post-3-0-93610500-1427052429_thumb.png post-3-0-37705400-1427052435_thumb.png post-3-0-10845200-1427052441_thumb.png post-3-0-46660900-1427052499_thumb.png

 

В окне стека наиболее важная предпоследняя функция в контекстном меню, которая позволит расструктуризовать стек в окне Dessect Data Structure. Для получения дополнительной информации про окно расструктуризации DessectData/Structure поищите темы на форуме)

Как перенести адреса из формы Changed addresses в главную табицу CE?

1. Должна быть открыта форма с адресами

post-3-0-12646900-1427053584_thumb.png

 

2. Открыть Lua консоль из меню главной формы Cheat Engine и выполнить код нажав на кнопку внизу

post-3-0-97578000-1427051814_thumb.png

 

 

3. Если все успешно, то результат например будет таким

post-3-0-08984800-1427051844_thumb.png

 

* Скрипт Lua не учитывает все формы Changed addresses

** Скрипт Lua учитывает тип из Changed addresses формы

function FindFrom(formName)  local formCount = getFormCount()   for i=0, formCount-1 do     if(getForm(i).Name == formName) then       return getForm(i)     end   endendfunction GetTypeFromComboBox(cbDisplayType)  local itemIndex = cbDisplayType.ItemIndex  local strCaption = cbDisplayType.Items[itemIndex]  if (strCaption == 'Byte') then     return vtByte  end  if (strCaption == '2 Bytes') then     return vtWord  end  if (strCaption == '4 Bytes') then     return vtDword  end  if (strCaption == 'Float') then     return vtSingle  end  if (strCaption == 'Double') then     return vtDouble  end  return vtDwordendlocal frmChangedAddresses = FindFrom('frmChangedAddresses')local changedlist = frmChangedAddresses.findComponentByName('Changedlist')local addressList = getAddressList()local itemsAddressList = changedlist.Itemslocal countLines = itemsAddressList.getCount()-- Получить тип в кобобоксеlocal cbDisplayType = frmChangedAddresses.findComponentByName('cbDisplayType')local indexType = GetTypeFromComboBox(cbDisplayType)for i=0, countLines-1 do    local mr = addressList.createMemoryRecord()    mr.Address = itemsAddressList.getItem(i).Caption    mr.Type = indexTypeend
Ссылка на комментарий
Поделиться на другие сайты

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

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

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