Вход

Просмотр полной версии : Дизасмы игр



esl
06.01.2015, 19:38
Попались тут, может уже были ?

где-то частичные ...

The Hobbit Source
Atic Atac Source
Knight Lore Source
Alien 8 Source
Sabre Wulf Source

http://www.icemark.com/downloads/index.html

и много инфы про движек

Knight Lore
Alien 8
Pentagram

http://retrospec.sgn.net/users/nwalker/filmation/

goodboy
06.01.2015, 20:33
http://opensourcezx.untergrund.net/

а вот свежатинка http://community.dur.ac.uk/philip.anderson/disassemblies/throughthetrapdoor/

esl
06.01.2015, 20:38
http://opensourcezx.untergrund.net/

а вот свежатинка http://community.dur.ac.uk/philip.anderson/disassemblies/throughthetrapdoor/

понял, боян ;)

rasmer
06.01.2015, 21:42
нет, нет... всё правильно... а то багси забил давно на свой сайт...

---------- Post added at 21:42 ---------- Previous post was at 21:40 ----------


а вот свежатинка http://community.dur.ac.uk/philip.anderson/disassemblies/throughthetrapdoor/Там смертоубийство какоето а не исходники... легче наверное заново сдекомпилить используя данный сайт как пособие где\что....

goodboy
06.01.2015, 21:45
Там смертоубийство какоето а не исходники..
как я понял используется какой-то SkoolKit http://skoolkit.ca/?page_id=177
у него свои навороты, типа build still and animated PNG/GIF images from graphic data

вот более точная ссылка на несколько игр (ThroughTrapDoor и трилогия MagicKnight)
http://community.dur.ac.uk/philip.anderson/disassemblies/
мелгих граф.багов в этих играх как оказалось - тьма

rasmer
06.01.2015, 22:01
о.... неужто под линукс нормальный декомпилятор????
а по поводу сайта - там смерть полная - одним файлом скачать нереально!!!

---------- Post added at 22:01 ---------- Previous post was at 21:58 ----------


мелгих граф.багов в этих играх как оказалось - тьмаНу и нассать на них...

esl
06.01.2015, 23:37
о.... неужто под линукс нормальный декомпилятор????


Wine + ida наше фсё

А формат скулкита - имеет смысл
Знакомится с текстом явно легче чем с портянкой

И графика и коменты

---------- Post added at 22:37 ---------- Previous post was at 22:31 ----------

Правда эта привычка к десятичной системе - мягко БЕСИТ :)

esl
07.01.2015, 02:40
ух ты, доки читать полезно

идея использовать трейс файл для определения исполняемого кода - рулез !!!!!
а в комплекте с RZX - вообще пол работы при дизасме игр для ZX

rasmer
07.01.2015, 02:45
ух ты, доки читать полезно

идея использовать трейс файл для определения исполняемого кода - рулез !!!!!
а в комплекте с RZX - вообще пол работы при дизасме игр для ZXПОПОДРОБНЕЕ!!!

esl
07.01.2015, 02:59
ПОПОДРОБНЕЕ!!!

идея проста как всё гинеальное ;)

что получаем в итоге - точно где код исполнялся в данной игрушке

как и почему

в FUSE есть такая фича назвается profile
(где-то есть трейс выполнения, что суть одно для наших целей)

включаем его, запускаем файл, гоняем его, выключаем и записываем профайл.
в файле адресс, кол-во исполнеинй ? (или T-States? что не так важно)
а важно что CPU исполнял код по этому адресу.

т.е. если мы обеспечим выполнение всех веток кода, то получим все байты где есть реально работающий код

а вот тут и поможет RZX (в лице RZXArchive)
что есть суть полное прохождение игру.
т.е перебор максимального кол-во веток кода.

т.е. включаем трейс, запускаем RZX
на выходе получаем профайл

в результате имеем где точно код ;)

проверил это на простейшем примере

простеший скрипт сконвертил в idc для иды
он сделал makeCode для байтов которые есть в профайле

на вид - работает ;)

т.е. большая часть работы сделана
работающие ветки кода - отмечены как код.

понятно что это часть работы, но большая

rasmer
07.01.2015, 03:01
а по поводу десятичной системы:
By default, sna2skool.py generates a control file and a skool file with addresses and instruction operands in decimal notation. If you prefer to work in hexadecimal, however, use the -h option to produce a hexadecimal control file, and the -H option to produce a hexadecimal skool file:

$ sna2skool.py -h -H -g game.ctl game.z80 > game.skool

---------- Post added at 03:01 ---------- Previous post was at 02:59 ----------

я не пользуюсь fuse я пользуюсь xpeccy: http://xpeccy.info
то есть ему снапшотом можно скормить RZX файл напрямую? или как?

esl
07.01.2015, 03:11
а по поводу десятичной системы:

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



я не пользуюсь fuse я пользуюсь xpeccy: http://xpeccy.info
то есть ему снапшотом можно скормить RZX файл напрямую? или как?

если в xpeccy появится фича - записать в файл адресс PC исполняющийся сейчас, то будет работать.

ну и нужна фича "проигрывания RZX"

Shadow Maker
07.01.2015, 03:12
включаем его, запускаем файл, гоняем его, выключаем и записываем профайл.
в файле адресс, кол-во исполнеинй ? (или T-States? что не так важно)
а важно что CPU исполнял код по этому адресу.

т.е. если мы обеспечим выполнение всех веток кода, то получим все байты где есть реально работающий код

а вот тут и поможет RZX (в лице RZXArchive)
что есть суть полное прохождение игру.
т.е перебор максимального кол-во веток кода.

т.е. включаем трейс, запускаем RZX
на выходе получаем профайл

в результате имеем где точно код ;)

проверил это на простейшем примере

простеший скрипт сконвертил в idc для иды
он сделал makeCode для байтов которые есть в профайле

на вид - работает ;)

т.е. большая часть работы сделана
работающие ветки кода - отмечены как код.

понятно что это часть работы, но большая

Круть! Уже есть конвертор, который профайлы фузы анализирует? Кстати, можно и собственно данные тем же макаром определять, наверное.

esl
07.01.2015, 03:17
Круть! Уже есть конвертор, который профайлы фузы анализирует? Кстати, можно и собственно данные тем же макаром определять, наверное.

Я сам офигел когда пришло в голову идея совместить профайл и RZX

ну вот что у меня набросалось.

require 'ap'

def read_profile(fname)
addrs=[]
File.open(fname).each_line do |l|
a,rest=l.split(',')
addrs << a
end
addrs.sort.uniq
end

def profile2idc(zarray)
out=[]
out << "#define UNLOADED_FILE 1"
out << "#include <idc.idc>"
out << ""
out << "static main() {"

zarray.each do |a|
out << "\tMakeUnknown(#{a},3,2);"
out << "\tMakeCode(#{a});"
end
out << "}"
out << ""
out
end

f2=read_profile("batty2.profile")
code=profile2idc(f2)

File.open("batty-code.idc","w"){|f| f.puts code }



по поводу данных - это нужно правильный трейс и много ума в парсере.

rasmer
07.01.2015, 03:25
прогоняю sna2skool
потом сразу делаю skool2asm - он ругается что якобы не может адреса сконвертить в метки.. чтото такое...

esl
07.01.2015, 03:34
прогоняю sna2skool
потом сразу делаю skool2asm - он ругается что якобы не может адреса сконвертить в метки.. чтото такое...

вот совсем не пробовал его гонять самого

ибо имхо с IDA не конкурент ....
а без интерактивности - дизсам не дизасм а мучение

rasmer
07.01.2015, 03:48
да ну - я спедизом нормально декомпилял в связке с анрылом тогда ещё под виндой

Alex Rider
07.01.2015, 03:59
понятно что это часть работы, но большая
ИМХО, без вменяемых меток, комментариев да и вообще понимания работы кода много чего с таким дизасмом сделать не получится. Хотя, вон Elite кладовскую разогнали неплохо так.

Spectramine
07.01.2015, 23:41
ИМХО, без вменяемых меток, комментариев да и вообще понимания работы кода много чего с таким дизасмом сделать не получится. Хотя, вон Elite кладовскую разогнали неплохо так.

Кто, где, можно узнать?

Alex Rider
07.01.2015, 23:53
Кто, где, можно узнать?
Вот в этой (http://zx-pk.ru/showthread.php?t=123) теме обсуждение (многабукаф, где начинается именно дискуссия про патчи искать лень). А это (http://vtrdos.ru/remix/E3VKP4.zip) мой образ, сделанный из патченного снапшота с работой через #3d13.

---------- Post added at 23:53 ---------- Previous post was at 23:52 ----------

Разгон делал Lethargeek

goodboy
08.01.2015, 00:28
Elite кладовскую разогнали неплохо так.

Кто, где, можно узнать?
http://zx-pk.ru/showpost.php?p=60099&postcount=275

esl
08.01.2015, 00:59
ИМХО, без вменяемых меток, комментариев да и вообще понимания работы кода много чего с таким дизасмом сделать не получится. Хотя, вон Elite кладовскую разогнали неплохо так.

Речь тут ТОЛЬКО про то что получаем точно области кода
Это уже немало

Всю отсальную работу отменить нельзя
только облегчить этапы

Alex Rider
08.01.2015, 01:14
Речь тут ТОЛЬКО про то что получаем точно области кода
Да, в принципе, пользительно оно если не ставить цель получить полный дизасм со всеми комментариями и осмысленными именами меток. Скажем, быстренько нарыть вывод на экран и оптимизировать. Или чит какой хитрый придумать. Если распутывать игру целиком от entry point, то можно и без этого обойтись. Все равно надо будет по известному коду понять что каждый конкретный байт в игре делает.

esl
08.01.2015, 01:32
Кстати ни разу не раскручивал от entry point
Не вижу смысла
Только рабочий снапшот памяти

goodboy
08.01.2015, 01:48
ни разу не раскручивал от entry point
титульная музыка вполне может быть сначала на месте буфера.
то есть прозвучит один раз после загрузки, а потом затрётся.

esl
08.01.2015, 01:58
Отдельный снапшот на заставку
Главное чтоб все переменные уже были проинециализироапнны

Alex Rider
08.01.2015, 19:27
Кстати ни разу не раскручивал от entry point
Не вижу смысла
Только рабочий снапшот памяти
Ну это опять же смотря чего ты хочешь добиться :) А если надо главное меню поправить? В обшем, имея полный дизасм с нормальными метками и комментариями из игры можно сделать что угодно :) Если же глобальных изменений не планируется, можно и неплоный дизасм для патча делать.

esl
08.01.2015, 20:04
Ну это опять же смотря чего ты хочешь добиться :) А если надо главное меню поправить? В обшем, имея полный дизасм с нормальными метками и комментариями из игры можно сделать что угодно :) Если же глобальных изменений не планируется, можно и неплоный дизасм для патча делать.

про меню - выше было ;)

а вообще я в курсе немного

есть некий опыт
1 - 100% разобраный по косточкам
1 - достаточный для переноса на другую платформу (MSX -> Корвет)
там логику вообще не разбирал, оставил как есть
а всё что имеет отношение к IO и данные - разобрано детально

Spectramine
08.01.2015, 20:31
Вот в этой (http://zx-pk.ru/showthread.php?t=123) теме обсуждение (многабукаф, где начинается именно дискуссия про патчи искать лень). А это (http://vtrdos.ru/remix/E3VKP4.zip) мой образ, сделанный из патченного снапшота с работой через #3d13.

---------- Post added at 23:53 ---------- Previous post was at 23:52 ----------

Разгон делал Lethargeek

А, это я в курсе. Он правда прилично оптимизировал отрисовку и перенос экрана. Я думал, кто-то ещё занимался разбором кода.

Alex Rider
08.01.2015, 21:57
про меню - выше было

а вообще я в курсе немного

есть некий опыт
1 - 100% разобраный по косточкам
1 - достаточный для переноса на другую платформу (MSX -> Корвет)
там логику вообще не разбирал, оставил как есть
а всё что имеет отношение к IO и данные - разобрано детально
Ну таки-да, согласен. Я считаю уже, что зря полез делать разбор Саботрера на 100%, надо было только вывод на экран заоптимизировать. Но, с другой стороны, есть профит: нарыл тормозной ИИ роботов и могу теперь переделать под TS-Conf.
Полный разбор отнимает дохрена времени, зато дает свободу в переделках. Хорошо, если игра более-менее модульная. С Саботером, сдается мне, переделка отрисовки дала бы много side-эффектов.
А так, повторюсь, идея профилирования рулезная, но не всегда подходящая. Все зависит от задач.

Bedazzle
02.08.2015, 14:27
простеший скрипт сконвертил в idc для иды
он сделал makeCode для байтов которые есть в профайле


скриптом для разметки не поделишься?

denpopov
02.08.2015, 14:57
в IDE нажимаешь shift+F2

вводишь:

main(); {

auto i;

for (i=0x8301;i<0x847f;i=i+2)
{
MakeWord(i);
}

}
этот скрипт помечает данные по адресам как слова.

Bedazzle
02.08.2015, 15:27
в IDE нажимаешь shift+F2
вводишь:
main(); {


Спасибо! Всё, оказывается, сильно проще, чем я до этого искал...