Написал скрипт, читает адреса блоков кода из файла. Процедуру чтения строки из файла взял из idc, который лежал в папке ИДы.
Вначале он почему-то много кусков кода помечал как .long таблицы, а не как код, оказалось, на эти места ссылается LEA. Поигрался с настройками анализа, отключил опцию Coagulate code segments в Kernel Options 2, теперь не портит блоки кода.
Кто-нить знает, как подсчитать количество строк кода в дизасме ИДЫ? Так, навскидку скрипт вроде бы все мои команды растащил. У меня в дизасме 63 тыщи строк кода. Я сделал асм идой, и в Notepad++ подсчитал количество инструкций так:
всего строк - 2005064
потом вычитаю другие строки поиском:
количество подстрок .byte - 1935571
.long - 971
.word - 18
строк с "-----------------" - 1657
":\t\t" - 1710 штук, такая подстрока идёт в лабелах типа "loc_0012: ". Перед каждым лабелом стоит пустая строка, поэтому умножаем на 2, т.е. 3420.
Остаётся 63427 строк. Вроде бы всё хорошо, но есть ещё строки c заголовком SUBROUTINE (288 штук) и строки с концом субрутины (296 штук), и там ещё много пустых строк, так что получается меньше 63 тыщ...
Кому интересно, вот архив. Там лежат:
- скрипт
- дизасм от моего анализатора, с поставленными гэпами, 63 тыщи строк
- полученный из дизасма список блоков кода. Я решил оставить полные строки, т.к. скрипт всё равно читает первое число (адрес), а остальную часть строки пропускает.
Как пользоваться. Открываете в ИДЕ ром Surging Aura, можно binary, неважно. В Kernel Options 2 надо отключить галочку "Coagulate code segments". Запускаете скрипт, указываете файл с блоками.
Могу дать дизасм для другой игры.