1
Ромхакинг и программирование / Ассемблер для PS2.
« : 21 Октябрь 2024, 15:59:50 »
Сорсы не хочешь выложить на Github в виде форка?) Так может какие умельцы ещё подтянутся.
В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.
Крашится IDA 8,3 на условных брейкпоинтах.Спасибо, чекну.
Сначала брейкпоинт срабатывает нормально.
Потом делаешь сброс на эмуляторе, игра доходит до брейкпоинта и IDA крашится.
Содержимое скрипта брейкпоинтаКод: [Выделить]Reg = idaapi.get_reg_val('A0')
return Reg == 0x1A4
Сообщение, которое выскакивает при крахе:
Добавлено позже:
И ещё не нашёл где находится TileDataPreview
Привет, а был стрим?привет. неа, я отменил - был занят:)
На канале ничего
DrMefistO, а сложно будет добавить, чтобы тайлы собирала в картинку?Есть тайловые редакторы. Это их задача. Предпросмотр тайлов в иде нужен лишь для того, чтобы понимать, что вот это - графика (и какая именно), а вот это - не графика.
А есть возможность добавить пропуск срабатывания брейкпоинта по определенному адресу? Т.е. допустим я ставлю брейк на чтение по адресу 0xff0000 и у меня срабатывает брейк по адресу 0x1000. Но это место не то, которое мне необходимо и мне надо сделать так, чтобы в этом месте бряк на чтение не срабатывал. На каком тодебагере, сейчас не вспомню, можно было добавлять диапазон адресов, в которых бы ни один брейкпоинт не срабатывал бы. Возможно, fceux. Называлось что то типа "забыть".Попробуй добавить условие на питоне в виде return False на адрес
Увидел, шикарно, будет немного боллерплейта, но благодаря питону можно любые условия делатьТак ты можешь питоном тоже сделать:
А смотрел как можно реализовать трейс? Хотя бы трейсить вызов конкретного места, и значение операндов на чтение и запись
DrMefistO, зачем? Могу дать в личку, но пока нахожу мелкие баги, т.е. код постоянно дорабатывается.Можешь создать приватный (либо публичный) реп, попробую помогать в разработке:)
Алгоритм прост: проходит по рому по чётным байтам (Сега же) и собирает адреса байтов 0x67 и 0x66 в надежде, что это BEQ и BNE. Далее по этому массиву адресов проходит двоичным поиском - делит пополам, первый сектор инвертирует BEQ <---> BNE, опрашивает пользователя, инвертирует обратно, потом повторяет это со вторым, потом делит первый пополам, и так до конца.
Пункты:
1 - просто пропускает текущий сектор. Раз баги в секторе мешают понять есть ли в этом секторе нужная инструкция, то лучше оставить на будущее, чтобы раздробить этот сектор.
2 - в этом секторе нет нужной инструкции, удаляем его из массива.
3 - в этом секторе есть нужная инструкция, удаляем все остальные секторы.
Yoti, да, я делаю дизасэмблер для этого. Но так как до его работоспособности далековато, не выдержал вот и сделал примитивный вариант, исследовательский проект
Дизасэмблер будет отличаться тем, что можно вручную инвертировать блоки кода, их условия, чтобы сразу увидеть эффект на экране, отматывать назад, пробовать поменять другие. Т.е. явно быстрее.
У тебя вообще не остались хоть какие-то записи или мысли по своим исследованиям? Было бы интересно и полезно.
Тем временем, попробовал открыть секретное меню в Streets of Rage. Игра весит ~500 килобайт, инструкций в ней нашлось ~4000.
И оказалось, что она очень хрупкая - игра почти всегда неработоспособная после порчи, постоянно убивает BlastEm.
За час и 20 минут пробежал 800 проходов и надоело, очень демотивирует
Т.е. найти-то мог далее, но не хотелось делать 4000 проходов, как если бы просто пройтись подряд по всем найденным инструкциям.
Сейчас решил попробовать перемешать инструкции в массиве перед поиском. Может чего даст.
тем временем меня расстраивает слишком долгое время загрузки кода. сам парсинг на команды то шустрый, ноооооо потом, чтобы это все выводить в окошке - я делаю копию массива текстовых строчек кода, и форматирую, добавляя пустые строки между блоками и добавляю "бэшки" (dc.b) где код не разобран. вот этот процесс и занимает кучу времени при запуске.Есть виртуальные листы. Выводить строчки не все целиком, а чанками, по количеству Видимых.
решил перейти от массива к лист. хотя меня смущает этот самый лист, так как по логике ведь там происходит каждый раз как бы редим массива. при редиме как раз и жрется куча времени. если в первом случае я просто создаю большой массив с запасом, а потом просто не использую пустые незаполненные строчки в конце массива, то есть редима каждый раз никакого нет, то вот при работе листа, по идее, при добавлении нового элемента, как раз и должен происходить этот самый "как-бы редим". зато лист будет удобен, если я начну делать редактирование. удалить строчку, добавить - там все делается влегкую. с массивом тупизм в этом плане.
пойду сделаю копию проекта, и попробую с листом. хотя настроен я весьма скептически на этот лист
ну пока моя первоначальная цель сделать парсер, чтобы он на выходе рожал 100% совместимый код с существующим ASM68K.exe. понятно что ASM68K.exe кривой и косой и местами прозёвывает команды с ошибками, но очень удобно что он в количестве одна штука и очень маленький и простой в использовании. и можно пихать копию в каждую папку с проектом. ида так делать код не умеет. да и докучи ида еще и с ашипкаме код рожает я прям удивился когда увидел. святая ида и на тебе!Нельзя автоматически сконвертировать ассемблированный код в исходный. Есть множество причин, вот некоторые:
как бы написать и не обидеть... ничего не буду писать.не пиши, не пользуйся. значит не твоё:)
чтоб тебя... это не удобно и не верно с точки зрения безопасности информации. например я открываю чужой разобранный проект, где уже лежит папка src с такими файлами. но сохранить хочу новый переразбор в другой папке. но получится что оригинальную папку ида перезапишет, хотя и кинет lst файл в ту папку куда я и хотел, а вот src перезапишет оригинальную в изначальной папке с ромом.Пробуй другой ассемблер - ссылки там в окошке есть
это первый вариант ассемблера. ошибки сверху не смотри, так как это все равно не тот ассемблер. а вот леа как раз то. пока не добавишь вручную во все места еще FF чтобы стало 8 символов - он не заведется.
ошибки нет? может ты старое по ошибке залил? как ругалась lea при сборке - так и ругается. как создавалось src не там - так и создается. хотя может я чо не туда сохранил еще... еще раз скачаю, перепроверю.Как именно ругается на lea? Попробуй другой азм.
Добавлено позже:
и ни фи га все по старому.
Добавлено позже:
или я не правильный асм выбираю при выгрузке?
ида 77. версия 32 битная. скачал новую версию тулсов как ты сказал, распаковал и открыл по новой ром батл сити. сам ничего не разбирал - что изначально ида разобрала - то и выгружаю. и там вот с этой lea ошибка. ну и с путями до папки src, в случае если ром лежит в одном месте, а файл lst я сохраняю в другом месте.Ида не умеет никак прерывать выгрузку листинга или asm.
Добавлено позже:
и проблема с диалогом отмены при создании lst файла. отмена не работает - ида все равно ныкается создавать файл по новой. то есть в диалоге на моменте выбора вида ассемблера:
Choose output assembler
по идее кнопка отмены должна полностью отменять процесс выгрузки, но тут отмена работает по сути как подтверждение что ты типа выбрал первый вариант AS Assembler и начинает выгружать. но по идее должна была произойти глобальная отмена выгрузки.
ида разбирает код какА, всё, туплю, адрес правильный. Ты в моём плагине базу начинал, или раньше, руками?Код: [Выделить]lea ($FFF152).w,a0
ASM68K.exe при сборке такого файла - ругается что адрес инвалидный. если вручную найти все такие строки и исправить наКод: [Выделить]lea ($FFFFF152).w,a0
то все начинает собираться без ошибок и работать.
и все так-же не хватает lea FF в начале. асм ругается на эти строки.Не понял.
рядом с ромом src надо папку создавать. и видимо независимо от того куда путь для создания lst. на диск д сохранял сам файл lst, а эти файлы из инклуда он рядом с ромом положил кое кто, не будем показывать пальцем, забыл в диалоге сохранения файла указать этот-же путь для сохранение инклудных файлов.Не нужно вручную папки создавать, всё создастся. Нужно только выбрать куда сохранять lst. Перекачай плагин, говорю же.
еще запускал иду от администратора.
оОбнови плагин из последнего релиза. Я починил создание листинга для 7.7.
похоже эти строки можно закомментить.У тебя какой-то адрес странный, нужно либо две F, либо четыре.
но опять таки старая проблема вылезла:Код: [Выделить]lea ($FFF152).w,a0
не хватает FF спереди: $FFF152 => $FFFFF152
мде... а дальше все посыпалось при сборке видимо нельзя их комментить как раз видимо описание этих переменных
при экспорте надо было галкой помечать ASM68K Assembler? то есть это как раз совместимый с ASM68K.exe который потом и собирает ром? а то может я не тот пункт выбираю и поэтому дело швах...
Добавлено позже:
ахахахаха кнопка отмены не работает в диалоге создания файла жму отмена - а Ида все равно ныкается создавать файл )))
DrMefistO,Можешь скинуть в личку idb, я проверю. Либо поищи сам ещё либо в каталоге с ромом, либо в каталоге с листингом.
Подскажи пожалуйста, по какой причине может не работать создание ассемблерного листинга?
Есть полностью разобранный ром, выбираю File->Produce file->Create LST file, после чего действительно создается файл.
Но в нем вначале есть вложения:
Этих файлов нигде нет и папки src тоже.
Я там еще насоздавал структур и енумов, кое-где использую не полностью структуры, а отдельные поля. Может в этом дело?
DrMefistO, у меня вопрос, как обратно добавить ром в проект? Изначально при открытии проекта Генс знает какой ром запускать. Но потом по какой-то причине это сломалось. И теперь надо каждый раз при открытии проекта открывать нужный ром через генс.В smd_ida_tools2 как сам Gens, так и ром в нём нужно выбирать вручную, т.к. сейчас gens не собирается в один файл с плагином для иды.