Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - DrMefistO

Страницы: [1] 2 3 4 5 ... 44 Далее
1
@trintel, крут!:) Рад, что пригодились инструменты)

2
Крашится IDA 8,3 на условных брейкпоинтах.
Сначала брейкпоинт срабатывает нормально.
Потом делаешь сброс на эмуляторе, игра доходит до брейкпоинта и IDA крашится.
Содержимое скрипта брейкпоинта
Reg = idaapi.get_reg_val('A0')
return Reg == 0x1A4

Сообщение, которое выскакивает при крахе:


Добавлено позже:
И ещё не нашёл где находится TileDataPreview
Спасибо, чекну.
Превью по Shift+D

3
Не все в интернетах появились с его основания:) Кто-то и вчера пришёл.

4
Релизнул новую версию, с Tiles Preview: https://github.com/lab313ru/smd_ida_tools2/releases/tag/v3.0

Если что, IDA Pro v8.3 была ликнута.

5
Привет, а был стрим?
На канале ничего
привет. неа, я отменил - был занят:)

6
DrMefistO, а сложно будет добавить, чтобы тайлы собирала в картинку?
Есть тайловые редакторы. Это их задача. Предпросмотр тайлов в иде нужен лишь для того, чтобы понимать, что вот это - графика (и какая именно), а вот это - не графика.

7
Вернул предпосмотр тайлов в иде во время статического анализа рома. Теперь можно выбирать и адрес палитры пока смотришь. Билд выкачу попозже.

А вообще, приходите на стрим завтра вечером, расскажу про плагин в целом, что теперь умеет, всякие базовые сценарии рассмотрим, чем может быть полезен.
273520-0

8
А есть возможность добавить пропуск срабатывания брейкпоинта по определенному адресу? Т.е. допустим я ставлю брейк на чтение по адресу 0xff0000  и у меня срабатывает брейк по адресу 0x1000. Но это место не то, которое мне необходимо и мне надо сделать так, чтобы в этом месте бряк на чтение не срабатывал. На каком тодебагере, сейчас не вспомню, можно было добавлять диапазон адресов, в которых бы ни один брейкпоинт не срабатывал бы. Возможно, fceux. Называлось что то типа "забыть".
Попробуй добавить условие на питоне в виде return False на адрес

9
Увидел, шикарно, будет немного боллерплейта, но благодаря питону можно любые условия делать  :cool:

А смотрел как можно реализовать трейс? Хотя бы трейсить вызов конкретного места, и значение операндов на чтение и запись
Так ты можешь питоном тоже сделать:
Ставишь бряк, делаешь код там, но делаешь return False и бряк не будет стопариться, но будет отрабатывать код из него

10
Реализовал условные брейкпоинты на базе того, что предлагает сама Ида! Подробнее тут: https://github.com/lab313ru/smd_ida_tools2/releases/tag/v2.9

11
DrMefistO, зачем? Могу дать в личку, но пока нахожу мелкие баги, т.е. код постоянно дорабатывается.
Алгоритм прост: проходит по рому по чётным байтам (Сега же) и собирает адреса байтов 0x67 и 0x66 в надежде, что это BEQ и BNE. Далее по этому массиву адресов проходит двоичным поиском - делит пополам, первый сектор инвертирует BEQ <---> BNE, опрашивает пользователя, инвертирует обратно, потом повторяет это со вторым, потом делит первый пополам, и так до конца.
Пункты:
1 - просто пропускает текущий сектор. Раз баги в секторе мешают понять есть ли в этом секторе нужная инструкция, то лучше оставить на будущее, чтобы раздробить этот сектор.
2 - в этом секторе нет нужной инструкции, удаляем его из массива.
3 - в этом секторе есть нужная инструкция, удаляем все остальные секторы.


Yoti, да, я делаю дизасэмблер для этого. Но так как до его работоспособности далековато, не выдержал вот и сделал примитивный вариант, исследовательский проект  :)
Дизасэмблер будет отличаться тем, что можно вручную инвертировать блоки кода, их условия, чтобы сразу увидеть эффект на экране, отматывать назад, пробовать поменять другие. Т.е. явно быстрее.
У тебя вообще не остались хоть какие-то записи или мысли по своим исследованиям? Было бы интересно и полезно.


Тем временем, попробовал открыть секретное меню в Streets of Rage. Игра весит ~500 килобайт, инструкций в ней нашлось ~4000.
И оказалось, что она очень хрупкая - игра почти всегда неработоспособная после порчи, постоянно убивает BlastEm.
За час и 20 минут пробежал 800 проходов и надоело, очень демотивирует  :lol:
Т.е. найти-то мог далее, но не хотелось делать 4000 проходов, как если бы просто пройтись подряд по всем найденным инструкциям.
Сейчас решил попробовать перемешать инструкции в массиве перед поиском. Может чего даст.
Можешь создать приватный (либо публичный) реп, попробую помогать в разработке:)

13
тем временем меня расстраивает слишком долгое время загрузки кода. сам парсинг на команды то шустрый, ноооооо потом, чтобы это все выводить в окошке - я делаю копию массива текстовых строчек кода, и форматирую, добавляя пустые строки между блоками и добавляю "бэшки" (dc.b) где код не разобран. вот этот процесс и занимает кучу времени при запуске.

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

пойду сделаю копию проекта, и попробую с листом. хотя настроен я весьма скептически на этот лист :)
Есть виртуальные листы. Выводить строчки не все целиком, а чанками, по количеству Видимых.

14
ну пока моя первоначальная цель сделать парсер, чтобы он на выходе рожал 100% совместимый код с существующим ASM68K.exe. понятно что ASM68K.exe кривой и косой и местами прозёвывает команды с ошибками, но очень удобно что он в количестве одна штука и очень маленький и простой в использовании. и можно пихать копию в каждую папку с проектом. ида так делать код не умеет. да и докучи ида еще и с ашипкаме код рожает :) я прям удивился когда увидел. святая ида и на тебе!

Нельзя автоматически сконвертировать ассемблированный код в исходный. Есть множество причин, вот некоторые:
1. Нет различий между засовыванием в регистр адреса и засовыванием в регистр числа
2. Какие-то данные могут использоваться относительно разных базовых адресов.
3. Выше уже написали: относительные прыжки и вызовы.

Добавлено позже:
Хочешь, чтобы ида тебе сразу весь ром красиво разложила - такого не бывает. Работа реверс-инженера в этом и заключается - нужно помогать интеррактивному дизассемблеру.

15
как бы написать и не обидеть... ничего не буду писать.
не пиши, не пользуйся. значит не твоё:)

16
чтоб тебя... это не удобно и не верно с точки зрения безопасности информации. например я открываю чужой разобранный проект, где уже лежит папка src с такими файлами. но сохранить хочу новый переразбор в другой папке. но получится что оригинальную папку ида перезапишет, хотя и кинет lst файл в ту папку куда я и хотел, а вот src перезапишет оригинальную в изначальной папке с ромом.

это первый вариант ассемблера. ошибки сверху не смотри, так как это все равно не тот ассемблер. а вот леа как раз то. пока не добавишь вручную во все места еще FF чтобы стало 8 символов - он не заведется.


Пробуй другой ассемблер - ссылки там в окошке есть

17
ошибки нет? может ты старое по ошибке залил? как ругалась lea при сборке - так и ругается. как создавалось src не там - так и создается. хотя может я чо не туда сохранил еще... еще раз скачаю, перепроверю.

Добавлено позже:
и ни фи га :) все по старому.

Добавлено позже:
или я не правильный асм выбираю при выгрузке?

Как именно ругается на lea? Попробуй другой азм.
src я не правил. Я рассчитываю на сохранение листинга рядом с ромом.

18
ида 77. версия 32 битная. скачал новую версию тулсов как ты сказал, распаковал и открыл по новой ром батл сити. сам ничего не разбирал - что изначально ида разобрала - то и выгружаю. и там вот с этой lea ошибка. ну и с путями до папки src, в случае если ром лежит в одном месте, а файл lst я сохраняю в другом месте.

Добавлено позже:
и проблема с диалогом отмены при создании lst файла. отмена не работает - ида все равно ныкается создавать файл по новой. то есть в диалоге на моменте выбора вида ассемблера:
Choose output assembler
по идее кнопка отмены должна полностью отменять процесс выгрузки, но тут отмена работает по сути как подтверждение что ты типа выбрал первый вариант AS Assembler и начинает выгружать. но по идее должна была произойти глобальная отмена выгрузки.
Ида не умеет никак прерывать выгрузку листинга или asm.

Добавлено позже:
Обновил до версии 2.8. Поправил некоторый выхлоп. https://github.com/lab313ru/smd_ida_tools2/releases/tag/v2.8

19
ида разбирает код как
lea     ($FFF152).w,a0ASM68K.exe при сборке такого файла - ругается что адрес инвалидный. если вручную найти все такие строки и исправить на
lea     ($FFFFF152).w,a0то все начинает собираться без ошибок и работать.
А, всё, туплю, адрес правильный. Ты в моём плагине базу начинал, или раньше, руками?

20
и все так-же не хватает lea FF в начале. асм ругается на эти строки.
Не понял.

21
рядом с ромом src надо папку создавать. и видимо независимо от того куда путь для создания lst. на диск д сохранял сам файл lst, а эти файлы из инклуда он рядом с ромом положил :) кое кто, не будем показывать пальцем, забыл в диалоге сохранения файла указать этот-же путь для сохранение инклудных файлов.

еще запускал иду от администратора.
Не нужно вручную папки создавать, всё создастся. Нужно только выбрать куда сохранять lst. Перекачай плагин, говорю же.

22
о
Обнови плагин из последнего релиза. Я починил создание листинга для 7.7.
ASM создавать не нужно.

Папка script содержит полезные файлы для сборки конккретным азмом. Передаёшь батнику путь к lst-файлу и пойдёт сборка.

23
похоже эти строки можно закомментить.

но опять таки старая проблема вылезла:
lea     ($FFF152).w,a0не хватает FF спереди: $FFF152 => $FFFFF152

мде... а дальше все посыпалось при сборке :) видимо нельзя их комментить :) как раз видимо описание этих переменных


при экспорте надо было галкой помечать ASM68K Assembler? то есть это как раз совместимый с ASM68K.exe который потом и собирает ром? а то может я не тот пункт выбираю и поэтому дело швах...

Добавлено позже:
ахахахаха кнопка отмены не работает в диалоге создания файла :) жму отмена - а Ида все равно ныкается создавать файл :))))
У тебя какой-то адрес странный, нужно либо две F, либо четыре.
При сборке точно всё посыпется, т.к. с первого раза собрать нереально, не зная особенностей:)

Например, у тебя все ram адрес должны быть помечены как данные, т.е. никаких unk_FFFF

24
DrMefistO,

Подскажи пожалуйста, по какой причине может не работать создание ассемблерного листинга?
Есть полностью разобранный ром, выбираю File->Produce file->Create LST file, после чего действительно создается файл.
Но в нем вначале есть вложения:

Этих файлов нигде нет и папки src тоже.

Я там еще насоздавал структур и енумов, кое-где использую не полностью структуры,  а отдельные поля. Может в этом дело?

Можешь скинуть в личку idb, я проверю. Либо поищи сам ещё либо в каталоге с ромом, либо в каталоге с листингом.

Добавлено позже:
Пофиксил билд для 7.7. Просьба перекачать.

25
DrMefistO, у меня вопрос, как обратно добавить ром в проект? Изначально при открытии проекта Генс знает какой ром запускать. Но потом по какой-то причине это сломалось. И теперь надо каждый раз при открытии проекта открывать нужный ром через генс.
В smd_ida_tools2 как сам Gens, так и ром в нём нужно выбирать вручную, т.к. сейчас gens не собирается в один файл с плагином для иды.

26
ну черт знает. надписи в эмуляторах чуть различаются. настройки звука одинаковые в них обоих. но в одном прям ярко звучит (из старой иды 6.8), а во втором (и в той версии что у меня эмулятор генс для игр на компе) как будто из бочки. плюс стартовая мелодия на выборе бойца бьет с ошибкой барабан. примерно как в комикс зоне одна из мелодий играет не верно - вот та-же фигня и тут со звуком. помню мы решали в GEMS эмуляторе такую-же проблему... ну как решали... я там присутствовал :) там какой-то множитель кароче "не тот" типа он выставлен под какую-то там сеговскую частоту... а на компе то 44100. и поэтому звучит отвратно. а чтобы звучало правильно - надо эту там какую-то циферку влепить другую. то есть по отношению к приставке код будет не точным, но зато на компе будет играть более сочно. https://www.emu-land.net/forum/index.php/topic,83239.msg1444575.html#msg1444575

ничего я не понял с этой отладкой чего отключать где как... ничего не включая чистую иду открою, загрузить готовый idb файл, выбираю LST... и понеслась моча по трубам три часа выгружает при сохранении. ASM сохранение чуть быстрее, но все равно один фиг три часа ждать. 6.8 ида выгружала ASM почти молниеносно.

запускал из папки, которую я скачал. v2.
v1 в старой иде он сам там откуда-то эмулятор запускает...
Можешь заснять видео, в котором долгий экспорт показан?

Насчёт звука - вполне может быть, что что-то не так, т.к. он заточен в первую очередь на отладку, а не на точность эмуляции в плане звука.

27
Эмулятор тот же самый, один в один. Настройки звука можешь поиграться.
Ты же говорил, что выгрузка работает нормально.
Выгружать нужно не под отладкой, а после или до.
Запускать gens нужно из папки, которую ты качал. Качал ты с github же?

28
1. Да
2. Да
3. Rom, он сам выберен нужный проц. На остальные вопрос отвечать в зависимости от того, использует ли ром эти регионы. Если ром не 32X и не SegaCD, или ты не уверен, можно выбирать Yes на все.
4. Отладчик идёт в архиве с остальным. Но для экспорта тебе он не нужен. Можно и статично всё разметить, после чего выгрузить.

Добавлено позже:
3-й питон нужен иде.

29
я так понимаю, что код, рожаемый IDA'ой мягко говоря не совсем совместим с ASM68K.EXE ? то есть нужно еще дополнительно парсер сделать, чтобы из идовского асм кода текст переформатировал в ASM68K.EXE совместимый?

а то я тут мальца запнулся:
move    a6,usp ; 0x4E66

в моей недосистеме 0х4E66 расшифровывает как:
4E66 movem.l -(a6), a7/a6/a5/a3/d6/d3/d2/d1
понятно что где-то видимо накосячил. IDA и еще одна досовская приблуда показывает как move    a6,usp
но на этот usp - ругается ASM68K.EXE и не хочет собирать.

оказалось надо не голый move, а move.l
move.l   a6,usp

еще брыкается на всякие типа:
align $10
но там видимо ошибочное распознавание и надо видимо пропускать, без дизасма - типа как данные какие-то. графика там к примеру.

дальше IDA, скатина, видимо недописывает FF к значению:
clr.w   ($FFF006).w - ASM68K.EXE ругается. правильно должно быть:
clr.w   ($FFFFF006).w
В smd_ida_tools_v2 есть экспортёр в код, собираемый различными ассемблерами m68k.

271671-0

30
А ещё - с z80: это я имел в виду Z80 BUS запросы из моторолы.

Страницы: [1] 2 3 4 5 ... 44 Далее