INFO
MIPS — микропроцессорная архитектура, которая была разработана в восьмидесятых годах прошлого века сотрудниками компании MIPS Computer Systems в соответствии с концепцией проектирования процессоров RISC (то есть для процессоров с упрощенным набором команд).
В этой статье речь пойдет именно об отладке с помощью всеми проклинаемого любимого GDB. Сначала я хотел найти какое-нибудь решение, чтобы каждый раз не вводить тонну магических команд типа x/* $reg
, которые помогают понимать то, что происходит с регистрами, стеком, кучей и прочим.
Готовые (ли) решения?
Я, как адекватный человек, полез в Google в поисках готовых инструментов, которые помогут облегчить мою жизнь. Вот что мне удалось накопать.
INFO
GDB по умолчанию имеет поддержку исполнения скриптов, через команду source
или аргумент командной строки -x
. В случае если GDB был скомпилирован с поддержкой Python, появляется также возможность использовать скрипты на этом языке.
PEDA
A точнее — PEDA-MIPS. Скачиваем и запускаем.
Понятно: у меня везде стоит Python 3, который не допускает одновременного использования табуляции и пробелов в качестве разделителей, а авторы, видимо, не слышали о прекращении поддержки Python 2 в 2020 году. Ну да ладно, исправим это и запустим еще разок.
И вроде бы все хорошо, но хочется большего: например, поддержку IDA Pro или удобный вывод состояния кучи. Разбираться почти в 7000 строк, чтобы добавить новую фичу, не очень-то заманчиво.
Плюсы:
+
может работать с MIPS;
+
простота реализации.
Минусы:
-
7000 строк кода в одном файле;
-
отсутствует расширяемость.
GEF
Скачиваем и приступаем к тестированию.
На этот раз хотя бы запускается без ошибок. Но строки здесь не разыменовываются.
INFO
Разыменование — термин, применяемый к указателям, позволяет получить значение, записанное в области памяти, на которую ссылается указатель. В случае со строками очень удобно, когда в результате такого чтения отладчик вместо последовательности 0x41414141 показывает строку AAAA
.
Идем в код, чтобы узнать причину, и, перелопатив около 10 000 строк кода, видим, что GEF настолько хитрый, что не понимает бинари, в которых не определяются секции, а в случае с MIPS это практически каждый второй. Зато GEF умет работать с IDA и даже импортировать структуры! К сожалению, и тут не без косяков…
Сначала сообщается, что имя метода состоит из строчных букв, а затем мы проверяем его, но уже на наличие заглавных букв: естественно, проверка всегда будет возвращать ложь.
Плюсы:
+
может работать с MIPS;
+
изящно выполнена система команд.
Минусы:
-
10 000 строк кода в одном файле;
-
много логических ошибок.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»