Вход

Просмотр полной версии : Смартовый дебаггер-это возможно?



yashcher
19.08.2012, 16:17
Изучаю ассемблер, пытаюсь понять как устроены игры, как работает код. Перепробовал разные эмуляторы, увы...

Есть ли дебаггер..?

1)который во время трассировки автоматически отделял бы команды ассемблера от данных (текста, ячеек памяти для хранения переменных, и т.п.), заменяя их хотя бы DEFB (и затем вручную можно было бы поправлять, группировать блоки по типу данных как в ZX Spin), чтобы в итоге получался практически исходник игры. А так получается всё намешано - всё выглядит как команды ассемблера, хотя это не так.

2)где автоматически подкрашиваются строки с исполняемым кодом при трассировке - чтобы видеть какая часть кода уже исполнялась и выполняется сейчас, а какая ещё нет (чтобы видеть логическую структуру всех блоков из которых например составлена игра). Затем при следующей трассировке уже другим цветом - если началась выполняться новая часть.

goblinish
19.08.2012, 16:29
1)который во время трассировки автоматически отделял бы команды ассемблера от данных (текста, ячеек памяти для хранения переменных, и т.п.), заменяя их хотя бы DEFB (и затем вручную можно было бы поправлять, группировать блоки по типу данных как в ZX Spin), чтобы в итоге получался практически исходник игры. А так получается всё намешано - всё выглядит как команды ассемблера, хотя это не так.

IDA удобна, хотя и не отладчик.

Shadow Maker
19.08.2012, 16:38
2)где автоматически подкрашиваются строки с исполняемым кодом при трассировке - чтобы видеть какая часть кода уже исполнялась и выполняется сейчас, а какая ещё нет (чтобы видеть логическую структуру всех блоков из которых например составлена игра). Затем при следующей трассировке уже другим цветом - если началась выполняться новая часть.
Ты такое вообще где-нибудь видел, хоть в каком отладчике? Или это у тебя фантазии такие. Я это даже теоретически слабо представляю как можно такое реализовать.

svofski
19.08.2012, 19:15
Не видел еще не значит невозможно. В некоторых эмуляторах есть счетчики доступа к памяти. В каком-то эмуляторе C64 есть визуальная карта памяти. А в VirtualVector-е есть счетчики исполнения, чтения и записи каждой ячейки. Если сделать для этого визуализацию, то будет похоже на то, чего хочет yashcher. Это не даст автоматом логической структуры, но будет видно, что меняется и исполняется каждый кадр, что раз в секунду, а что изредка.

goblinish
19.08.2012, 19:25
http://www.oshonsoft.com/z80.html
http://www.z80.info/z80emu.htm

yashcher
19.08.2012, 22:11
Ты такое вообще где-нибудь видел, хоть в каком отладчике? Или это у тебя фантазии такие. Я это даже теоретически слабо представляю как можно такое реализовать.

Я не видел, поэтому и спрашиваю у более опытных и мастеровитых участников форума. И хочу просто узнать возможно ли это, и что уже есть похожее. Поэтому и заголовок соответствующий. Может эта идея натолкнёт кого-нибудь из разработчиков эмуляторов на развитие возможностей дебаггера. Мне новичку, который знакомится с ассемблером сейчас при анализе кода этого не хватает.

Если эмулятор может выстраивать весь код целиком наперёд по всем адресам и выполнять его, мне не понятно почему он не может, если нужно, выделить цветом все ячейки памяти, которые были задействованы, и те команды, что он выполнил и выполняет в данный момент времени, если мне это нужно засечь по нажатию какого-нибудь "Ctrl+..." и затем сравнить с тем, что будет дальше. Возьмём, например, Saboteur_Avenging Angel. Игра загрузилась, появляется меню с предупреждением о подделке и играет музыка, ждёт нажатие клавиши - всё это идёт в цикле - выделился одним цветом весь исполнимый код. Затем нажимаю клавишу, игра идёт дальше: появляется меню выбора управления, играет музыка, опять ждёт нажатие клавиши - это новая часть - другим цветом. Теперь видно какой код работал, какие подпрограммы вызывались, какие ячейки памяти (типа DEFB) вызывались, а что ещё нет. Итак блок за блоком разбираться, что к чему. Разве это фантазии?

jerri
19.08.2012, 22:35
yashcher, ЧИСТОЙ воды фантазии
никому не требовалось потому и не сделали

goblinish
19.08.2012, 22:43
yashcher, ЧИСТОЙ воды фантазии
никому не требовалось потому и не сделали
Отладка вместе с Interactive IDA хватит.

Vitamin
20.08.2012, 13:21
Одно время пытался написать такой дизассемблер в виде плагина к TotalCommander. Он брал кодовый блок и пытался его исполнить с разных адресов для вычисления исполняемых частей и адреса расположения блока. Потом это дело забросил.

yashcher
21.08.2012, 23:59
Одно время пытался написать такой дизассемблер в виде плагина к TotalCommander. Он брал кодовый блок и пытался его исполнить с разных адресов для вычисления исполняемых частей и адреса расположения блока. Потом это дело забросил.

Что-нибудь получилось или совсем нет?

Vitamin
22.08.2012, 00:09
Что-нибудь получилось или совсем нет?
Что-то получилось. Но слишком медленно работало. Плюс, как и всякая другая эвристика, дает слишком много сбоев.

yashcher
24.08.2012, 13:35
Установил IDA Pro. Ого! :v2_dizzy_roll: Похоже это то, что я и представлял (выделение цветом, графические схемы логики, отделяет код от данных, и т.п...). Осталось научиться пользоваться. Есть книга Chris Eagle - The IDA Pro Book - 2011. Будем разбираться.

goblinish
24.08.2012, 14:47
отделяет код от данных
ПКМ - наше всё, можно отдельно преобразовать невнятные данные в DB/DW.


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


и самое интересное - готовый ASM файл без особого напряга компилится sjASM.