Дизассемблеры С/С++
Вложений: 2
Чаще всего дизассемблер используют для анализа программы (или ее части), исходный текст которой неизвестен — с целью модификации, копирования или взлома.
Реже — для поиска ошибок (багов) в программах и компиляторах, а также для анализа оптимизации создаваемого компилятором машинного кода. Дизассе́мблер — транслятор, преобразующий машинный код, объектный файл или библиотечные модули в текст программы на языке ассемблера. Пример интерактивного — IDA. Он позволяет изменять правила дизассемблирования и является весьма удобным инструментом для исследования программ. Такие дизассемблеры генерируют готовый листинг, который можно затем править в текстовом редакторе. Основная трудность при работе дизассемблера — отличить данные от машинного кода, поэтому на первых проходах автоматически или интерактивно собирается информация о границах процедур и функций, а на последнем проходе формируется итоговый листинг. Интерактивность позволяет улучшить этот процесс, так как просматривая дамп дизассемблируемой области памяти, программист может сразу выделить строковые константы, дать содержательные имена известным точкам входа, прокомментировать разобранные им фрагменты программы. Нас интересуют дизассемблеры, позволяющие декомпилировать код файлов для платформы PSP. А выбор таких не так уж и велик. Как известно, PSP понимает исполняемые файлы формата ELF (Executable and Linkable Format (PRX)), написанные на языке С++. Я пока знаю 4 таких дизассемблера, умеющих работать с ELF-форматом:
|
Название темы рулит =)
И как бы самый настоящий "дизассемблер для C", ты как раз таки забыл -> http://forums.ps2dev.org/viewtopic.php?t=11985 |
stillllll, спасибо. Да, как раз, когда я писал эту статью, я видел этот дизассемблер. Но что-то немного не понял.
Похоже это порт на PRXTool 1.1 by TyRaNiD. Да и он пишет, что есть куча багов, типа не обращайте внимания. Я скачал последнюю версию отсюда: http://repo.or.cz/w/pspdecompiler.git и пытался скомпилировать программу, но что-то у меня лезут ошибки. В редми пишется, что необходима "Requirements: libexpat1-dev". Ну я скачал её отсюда: http://sourceforge.net/projects/expat/ и установил. Вытащил все либы и подсунул. Но толку от этого никакого. Если ты в курсе как этим пользоваться, то мог бы создать тему или здесть запостить и хоть как-то расписать, чтобы более-менее понятно было, как этим пользоваться... |
Качать libexpat1-dev нужно с официальных репозиториев cygwin'а. Я собирал cygwin сам, все библиотеки по максимуму, кроме графических.
У меня собрался без проблем. http://dump.ru/file/4127079 В файле dissassamble.bat нужно "FILE.PRX" заменить на нужное имя файла, либо вручную параметры запуска дизассемблера написать. На выходе получаем два файла: .c и .h Обидно, что ни один из EBOOT.BIN мною испробованных он не взял, а вот мелкие PRX на ура дербанит, причем код довольно удобочитаемый получается. |
mc707, о, спасибо. Я вообще cygwin-ом не пользуюсь. У меня просто Minimalist PSPSDK for Windows и он пока меня не подводил. Всё компилит удачно на Win7. Но похоже cygwin всё-же необходим, т.к. линуксовые некоторые команды, типа "./bootstrap" нужно вероятно в среде цигвин выполнять или в консоли Линукса.
А чем не устраивает PRXTool? Он вроде намного мощьней. Цитата:
Цитата:
P.S. Кстати, что-то я совсем забыл добавить в шапке во вложение PRXTool 1.1 by TyRaNiD, а то кто-то не поймёт как этим пользоваться. Щас хочу нарисовать сразу все команды - это получиться 20 с лишним батников на все случаи жизни. |
Цитата:
PRXTool дербанит файл целиком, сохраняет все секции, импорты/экспорты, текстовые переменные, данные и т.п. Естественно что он намного мощней. Но если хочется получить структуру кода, последовательность выполнения внутренних функций, анализировать сложные и длинные функции, то тут prxtool практически безполезен. Цитата:
|
Залил PRXTool v1.1.
Проверьте, всё ли правильно? Разложил для удобства на батники по списку функций в том порядке, как здесь, чтобы соблюсти спецификацию. Ту статью в общем взял за базу. В архиве лежат два скрытых файла - сам prxtool.exe и библиотека нидов libdoc.xml. Так что не потеряйте их, а то их не видно. Специально спрятал, чобы не мешались в общей папке. Закиньте в разархивированную папку декриптованный PRX и потестите. Правильно ли я все команды вписал? Самая интересная функция в пункте 17 с полным дизасмом. Особенно интересна функция дизасма в HTML. То есть, там перекрёстные ссылки (прыжки со смещения на смещение) идут как настоящие ссылки HTML и нажимая на них, перемещаешься на ту позицию, куда она ведёт. А ещё мне вообще понравилась тоже функция дизасма в HTML, но уже кучи файлов, например прошивки. И при выводе в HTML, все файлы, взаимодействующие между собой, так-же перепрыгиваются от файла к файлу, если смещение указывает на другой файл прошивки или программы. Чтобы исследовать прошивку и связи между файлами, то нужно в папку с PRXTool кинуть две папки с декриптованными файлами PRX прошивки - это папка "KD" и папка "module". Вот эти папки нужно и закинуть. После дизасма 17-ым пунктом, появиться к каждому файлу прошивки свой файл HTML. Так вот, ссылки из одного файла, работают к другому. Просто в браузере можно перемещаться в пределах одного окна по взаимосвязанным смещениям от файла к файлу, перемещаться в браузере кнопкой "Назад" и "Вперёд". В общем всё работает. Нулевой пункт 00 - удаляет весь мусор, все созданные текстовики и html-ы. Добавил в шапку PSPDecompiler. mc707, посмотри, там TiRaNiD что-то обновлял, какие-то файлы добавлял Rev: 2492 в свою PRXTool. Может нужно обновиться? Я ещё не знаю, как с SVN качать. В линуксе легко. Там уже это заложено, подставил адрес и поехало. |
Посмотрел, отличий минимум. Различия имеются только в файле ProcessPrx.C. В комментариях написано, что теперь помогает дизасмить те файлы, у которых поврежден заголовок.
А насчет скачивания с svn, по крайней мере в cygwin, - аналогично линуксу. Из домашнего каталога пишешь "svn checkout svn://svn.ps2dev.org/psp/trunk/prxtool" и все. |
mc707, спасибо. С SVN разобрался. Воспользовался прогой под виндус - TortoiseSVN. Ничё, мне понравилось. Правда помучился, пока разобрался. Как только адреса не подставлял в эту черепаху, а скачивать с SVN ни за что не хотел.
Спасло то, что я когда скачал исходники TiRaNiD-а, то заметил, что его папка приобрела другой вид, с зелёной галочкой. Нажал правой кнопкой и выбрал обновить. Так он тут-же сам подключился и скачал обновления автоматом. После этого стало всё качаться. Я даже с SVN скачал все исходники для PSP, включая branches, tags, trunk и vendor. Всё это 800 с лишним мегабайт =))). |
воо...спасибочки за тему,будет что поковырять вечерком
начну пожалуй с исходников программ на пс2,ибо они уже в elf все и на мой взгляд платформа не использует весь свой потенциал *.* а вот и первый запуск ошибки |
SunTexnik, а ты при запуске это выбирал (выделено синим):
Скрин |
ммм...открывал
http://i056.radikal.ru/1001/69/6cd388151f58.png так как все программы пс2 в формате elf a не psx |
SunTexnik, в принципе да, PSX вероятно нужно выбирать для PS1.
Ну так PRX на PSP тоже ведь все в ELF-формате. Там при запуске нужно ещё вид процессора выбирать. Какой там процессор на PS2? |
сейчас посмотрим...
Процессор: 128-разрядный микропроцессор «Emotion Engine» на тактовой частоте 294 МГц, 10,5 млн транзисторов http://ru.wikipedia.org/wiki/Emotion_Engine |
Значит MIPS R5900
Скрин |
Пытаюсь с помощью PRXTool дизассемблировать файл music_player.prx. Но можно сказать что ничего не распознаётся. Распознаётся не как эльф, а как бинарный файл. Выбираю UNIX потом ELF, выбираю нужный проц, но сверху только binary. Пробовал разными версиями ida. Что за шляпа?
|
Cheppus, а ты music_player.prx перед дизасмом декриптовал? Посмотри его в хексе.
|
Блин, не знал что надо декриптовать)
|
Компилирование ASM кода
Извините за глупый вопрос, но можно ли скомпилировать ASM код, полученный через PRXTool, и если можно, то как?
Заранее благодарен! |
|
Текущее время: 22:34. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.