Перейти к содержимому


Фотография

Редактор скриптов GTA4


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 89

#61 listener

listener

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 356 сообщений
  • Пол:Мужчина
  • Город:Ft.Lauderdale


Отправлено 29 November 2009 - 14:04

Очередной раз, отсылаю к RCT.

Что происходит на этапе CFA.
Код разбирается на basic block-и - непрерывные последовательности, имеющие одну начальную и одну конечную точку.
В BBlock-е должна содержаться одна и только одна control flow команда - ей должен заканчиваться блок.
С точки зрения управляющих конструкций (if/while/switch), BBlock - это атомарная единица (т.е., его содержимым можно пренебречь). call/native должны рассматриваться как control flow команды только в том случае, если вызываемая функция не возвращает управление (поскольку компилятор R* в любом случае вставляет после таких call либо j либо ret, этим случаем тоже можно пренебречь).

(Следующий метод не претендует на единственно правильную истину, но у меня он работает)
Что получается: получаются две фазы: в первой, мы собираем блоки и функции. (функция представляем собой ориентированный граф, узлами которого являются б-блоки. На этом этапе я убираю все control flow команды и полностью ухожу от адресов в коде). во второй, из этих блоков собираются узлы-операторы AST.

Применительно к процитированному фрагменту, получаем следующее.
Команда #16 удаляется, следующая за ней функция выносится в отдельный объект.
Получаем:
; enter 0 2 - удаляется, переносится в параметры функции
---- #0: 2-Exit BBlock, exits: #1, #2
native n_3B0C6738 0 2; кстати, откуда здесь 2 ? должно быть один
; jf @40 - удалено, перенесено в параметры блока
---- #1: 1-exit BBlock, exit: #2
call sub_21
---- #2: 0-exit block (предполагая, что дальше до ret ветвлений нет)
ipush 0
native n_266716AC 1 0
----
2-exit блок - это либо if, либо while, в зависимости от того, есть для этого блока back edge, или нет.
(for рассматривается как разновидность while и определяется позднее).

Поскольку блок #0 не имеет back edge (т.е. перехода на него из следующих за ним блоков) - это if.
Дальше нужно определить, есть ли у него else block. Поскольку в блок #2 есть переход из блоков между #0 (блоком, в котором содержится if) и #2 (рассматриваемым блоком), он не является else блоком. Т.е. получаем:

function sub_0 (0 params, 0 frame) {
	native n_3B0C6738 0 1
	if {
		call sub_21
	}
	ipush1 0
	native n_266716AC 1 0
}
Примерно так, только у меня на момент получения такого текста, все выражения уже разобраны и получается нормальный высокоуровневый текст.
You think your day was surreal? Try mine.

#62 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 03 December 2009 - 17:21

Спасибо за хорошее объяснение и подсказку где почитать про это можно, я сделал что-то похожее на BBlocks у себя (на деле использовал простой массив TStringList), так что идея чтения теперь очень и очень понятна. Дизассемблер: код полностью написан мной самостоятельно (чтение файла). Помимо этого сделан вывод данных в текстовом виде (интерфейс похож на IDA Pro), вывод в структурном виде с хорошей подцветкой синтаксиса и командами вроде перейти по ссылке-адресу (jmp, jmpf, jmpt, call), фильтрами по команде (большая часть кода касательно фильтров и подцветки взята из исходников GooD-а). Декомпилятор: есть некоторые продвижения. Например, уже имеются идеи по поводу if-ов (частично законченные). Хотелось бы узнать побольше, поподробнее как действовать с while и switch.
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#63 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 15 January 2010 - 12:24

Видимо хороший декомпилятор с высокоуровневым языком сделать не не получится, но зато удастся реализовать рабочий дизассемблер (и даже ассемблер), по структуре языка похожий на скриптовый язык предыдущих игр серии. От опкодов, думаю, следует отказаться, заменив их ключевыми словами. Ниже приведен скриншот, где показан начальный общий интерфейс. При декомпилировании все адреса call/jump/jumpf/jmpt/switch заменяются на номера sub-ов (просто по порядку), после чего в тот участок текста, код которого имеет данные адрес, добавляется нужный номер. Далее, надо что-то сделать для свертывания кода, объединения функций.

Прикрепленные файлы


в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#64 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 18 January 2010 - 17:48

Написал у себя в блоге про разработку несколько подробнее. Комментарии и пожелания приветствуются, но их лучше писать именно там, так как скорее всего многое будет повторяться.

Прикрепленные файлы


в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#65 Capushon

Capushon

    Активный участник

  • Пользователи
  • PipPipPip
  • 39 сообщений
  • Пол:Мужчина
  • Город:Украина

Отправлено 27 January 2010 - 15:16

2Dageron:

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

Это как-раз не проблема, подойдёт любой уровень (imho, чем он ниже - тем лучше по крайней мере для меня), главное полностью рабочий компилятор/декомпилятор + пара примеров его использования.
Сначала ты надежда и гордость, Потом о спину ломают аршин. ©БГ

#66 Johnix

Johnix

    Активный участник

  • Пользователи
  • PipPipPip
  • 87 сообщений
  • Пол:Мужчина
  • Город:Новосибирск

Отправлено 18 February 2010 - 17:22

на скринах знакомые слова и цвет. это радует. все остальное для меня набор символов. это не радует
Изображение
Изображение

#67 VcSaJen

VcSaJen

    Активный участник

  • Пользователи
  • PipPipPip
  • 270 сообщений
  • Пол:Мужчина
  • Интересы:GTA, скриптинг в GTA.


Отправлено 18 March 2010 - 05:02

@Listener - Как насчёт совместимости? C4 поддерживает обе версии игры (до 1.0.0.4 и после) или только 1.0.0.4? Можно ли скомпилировать так, что-бы работало во всех версиях?

#68 buch

buch

    Новичок

  • Пользователи
  • Pip
  • 1 сообщений

Отправлено 15 July 2010 - 16:07

Можно я тоже поинтересуюсь - в каком состоянии сейчас (де)компилятор? Можно уже чего-нибудь попробовать?

#69 shkun

shkun

    Участник

  • Пользователи
  • PipPip
  • 12 сообщений
  • Пол:Мужчина
  • Интересы:Скриптинг, моделинг GTA SA и GTA IV

Отправлено 15 July 2010 - 17:50

Да, мне тоже интересно)

#70 VcSaJen

VcSaJen

    Активный участник

  • Пользователи
  • PipPipPip
  • 270 сообщений
  • Пол:Мужчина
  • Интересы:GTA, скриптинг в GTA.


Отправлено 06 November 2010 - 13:21

1)Когда выйдет С4? 2)Если нет, то какие ещё есть кроме C4 редакторы скриптов?

#71 Capushon

Capushon

    Активный участник

  • Пользователи
  • PipPipPip
  • 39 сообщений
  • Пол:Мужчина
  • Город:Украина

Отправлено 06 November 2010 - 16:38

Да, новостей давно не было, а будет ли он вообще - Script Builder для GTA4?

Сообщение отредактировал Capushon: 06 November 2010 - 16:38

Сначала ты надежда и гордость, Потом о спину ломают аршин. ©БГ

#72 listener

listener

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 356 сообщений
  • Пол:Мужчина
  • Город:Ft.Lauderdale


Отправлено 06 November 2010 - 20:38

Вообще, работа двигается ;) Правда, поскольку интереса никто не проявлял, последнее время, работа двигалась в сторону декомпилятора .sco v.2 (.xsc). А к компилятору я планирую возвращаться не раньше, чем посмотрю, как в R* обрабатывают .tr (благо, этот компилятор в .exe-шнике присутствует).
You think your day was surreal? Try mine.

#73 Capushon

Capushon

    Активный участник

  • Пользователи
  • PipPipPip
  • 39 сообщений
  • Пол:Мужчина
  • Город:Украина

Отправлено 06 November 2010 - 21:05

2listener:

поскольку интереса никто не проявлял, последнее время

Как не проявлял ??? Изображение
Скоро будет год, как я безнадёжно жду билдер !
Сначала ты надежда и гордость, Потом о спину ломают аршин. ©БГ

#74 GHOST

GHOST

    Активный участник

  • Пользователи
  • PipPipPip
  • 75 сообщений
  • Пол:Мужчина
  • Город:Тамбов


Отправлено 07 November 2010 - 07:32

Вообще, работа двигается ;)
Правда, поскольку интереса никто не проявлял


Интерес есть! :rolleyes: Ты ничего нового не говорил, а а постоянно спрашивать как там работа, продвигается и т.д. как-то невежливо будет..

#75 BabbyDJ

BabbyDJ

    Новичок

  • Пользователи
  • Pip
  • 2 сообщений

Отправлено 14 January 2011 - 01:03

Вообще, работа двигается ;)
Правда, поскольку интереса никто не проявлял


Интерес есть! :rolleyes: Ты ничего нового не говорил, а а постоянно спрашивать как там работа, продвигается и т.д. как-то невежливо будет..

is it done sorry i dont know Russian.

#76 Seemann

Seemann

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 266 сообщений
  • Пол:Мужчина
  • Город:Россия, Иркутск/СПб

Отправлено 14 January 2011 - 04:23

no its not

#77 BabbyDJ

BabbyDJ

    Новичок

  • Пользователи
  • Pip
  • 2 сообщений

Отправлено 14 January 2011 - 20:48

ok i hope to script soon when released :P

#78 VcSaJen

VcSaJen

    Активный участник

  • Пользователи
  • PipPipPip
  • 270 сообщений
  • Пол:Мужчина
  • Интересы:GTA, скриптинг в GTA.


Отправлено 23 January 2011 - 00:59

Правда, поскольку интереса никто не проявлял, последнее время, работа двигалась в сторону декомпилятора .sco v.2 (.xsc).

Лучше продолжить делать компилятор для GTA4.

Сообщение отредактировал VcSaJen: 23 January 2011 - 14:54


#79 listener

listener

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 356 сообщений
  • Пол:Мужчина
  • Город:Ft.Lauderdale


Отправлено 23 January 2011 - 13:58

А смысл? Мне тут уже объяснили, что я умею только "ругаться матом и ставить свастики на аватары", так что сейчас у меня нет никакого желания продолжать какие-то публичные разработки.
You think your day was surreal? Try mine.

#80 VcSaJen

VcSaJen

    Активный участник

  • Пользователи
  • PipPipPip
  • 270 сообщений
  • Пол:Мужчина
  • Интересы:GTA, скриптинг в GTA.


Отправлено 23 January 2011 - 14:46

Что только не скажешь друг другу в запале спора, особенно при отсутствии модерации... Нужно просто немного остыть, простить друг друга, и продолжить делать компилятор. Компилятор ждут не только здешние форумчане, но и миллионы других людей во всём земном шаре. Они будут тебе благодарны

Сообщение отредактировал VcSaJen: 26 January 2011 - 04:06





Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных