Дизассемблируем циклы, написанные на Си

Доброго времени суток.
Сегодня мы будем смотреть дизассемблированный код инструкций if, for, while, swich, которые написаны на языке Си. Воспользуемся radare2.

Язык программирования низкого уровня

Доброго времени суток.
Сегодня мы будем смотреть дизассемблированный код инструкций if, for, while, swich, которые написаны на языке Си. Воспользуемся radare2.


dosnet.vxd. Кроме того, vmm32.vxd я распаковал, и удалил бывшие внутри него необязательные драйвера.




Приветствую,

Эта статья будет о том, как не нужно делать, когда разрабатываешь SDK для своего продукта. А примером, можно даже сказать, самым ярким, будет IDA Pro. Те, кто хоть раз что-то разрабатывал под неё и старался поддерживать, при чтении этих строк, наверняка, сейчас вздрогнули и покрылись холодным потом. Здесь я собрал опыт сопровождения проектов, начиная с IDA v6.5, и заканчивая последней на момент написания статьи версии — v7.5. В общем, погнали.


mov. (В общем-то известно, что одних инструкций mov достаточно, чтобы написать любую программу.)| ISA | Размер бинарника | Размер секции .text | Общее число инструкций | Число разных инструкций |
|---|---|---|---|---|
| AArch64 | 97 МБ | 74 МБ | 13,814,975 | 195 |
| ARMv7A | 101 МБ | 80 МБ | 15,621,010 | 308 |
| i386 | 106 МБ | 88 МБ | 20,138,657 | 122 |
| PowerPC64LE | 108 МБ | 89 МБ | 17,208,502 | 288 |
| SPARCv9 | 129 МБ | 105 МБ | 19,993,362 | 122 |
| x86_64 | 107 МБ | 87 МБ | 15,281,299 | 203 |


В этой статье я хочу разобрать внутреннее устройство легендарной игры Sonic the Hedgehog для приставки Sega Mega Drive, а также способы ее модификации или, как еще говорят, хакинга. Эта игра насчитывает порядка сотни хаков, включающих как действительно достойные работы (такие как Pana Der Hejhog или Sonic Remastered), так и странные и даже жутковатые (вроде An Ordinary Sonic ROM Hack). Чтобы понять, как их создавать, нужно разобраться, как писать на языке ассемеблера Motorola 68K (обычно игры для приставок тех времен писались именно на ассемблере), откуда взять дизассемблированный вариант игры и какую архитектуру имеет ее движок.

Дизассемблирование ROM-файлов для Sega осуществляется при помощи коммерческого дизассемблера и дебаггера IDA Pro. Затем происходит кропотливый процесс разметки, структурирования и причесывания сырого ассемблерного кода с использованием дебаггера (и смекалки). Этот процесс требует хорошего понимания технических особенностей платформы Sega Mega Drive и игр для нее.
К счастью, на GitHub уже есть дизассемблированные и размеченные версии всех игр серии Sonic the Hedgehog, созданные энтузиастами при поддержке сайта Sonic Retro. Лучше всего размечен и структурирован исходный код именно первой игры серии. Эта версия кода находится в репозитории sonicretro / s1disasm и именно она будет разобрана в статье.
Погружение в внутреннее устройство игрушки начнем с теории.

