Дизассемблер собственного кода ARMV4i (Windows Mobile 6) - PullRequest
2 голосов
/ 22 августа 2008

Кто-нибудь знает дизассемблер для ARMV4i исполняемых файлов и библиотек DLL?

У меня есть подключаемый модуль DLL, который я пишу с очень редкой data abort (<5% времени), которую я сузил до определенной функции (через дампбин и адрес, выводимый <code>data abort). Однако это довольно большая функция, и я хотел бы немного ее сузить. Я знаю, что это происходит при вызове memset(), но эта конкретная функция имеет около 35 из них, поэтому я надеялся, что, взглянув на разборку, я смог выяснить, где на самом деле находится проблема.

Ответы [ 4 ]

3 голосов
/ 26 августа 2008

Я верю, что IDA Pro будет делать то, что вы хотите. Он упоминался в книге О'Рейли по безопасности, и я видел его рекомендованным на форумах разработчиков Windows Mobile.

3 голосов
/ 26 августа 2008

IDA Pro обязательно сделает разборку ARM. И они (Datarescue) однажды предоставили мне лицензию примерно в 11 вечера по местному времени, поэтому я бы хотел порекомендовать их ...

Я вижу из http://www.datarescue.com/idabase/, что произошла некоторая перестройка компании, но я думаю, что это все еще хороший продукт.

Вот ссылка на нового издателя: http://www.hex -rays.com / idapro /

1 голос
/ 13 сентября 2008

ChARMeD - это дизассемблер и ассемблер Windows Mobile / Pocket PC / Win CE (для процессоров ARM)

Вы также можете взглянуть на BDASM, условно-бесплатный дизассемблер - более поздние версии имеют плагины ARM. Веб-сайт, кажется, не работает, но если вы ищете его, вы найдете условно-бесплатную версию.

Также доступен исходный код простого дизассемблера ARM, DISARM .

Для создания дизассемблирования можно использовать objdump binutils (инструменты компилятора Linux), "objdump -b binary -m arm7tdmi -D file_name"

-Adam

0 голосов
/ 23 августа 2008

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

В вашем случае, не могли бы вы попросить ваш компилятор сгенерировать список сборок скомпилированного кода? Это может помочь вам в некоторой сфере.

Если это не удастся, вы можете разбить свою функцию на одну или несколько новых функций, если все, что вы можете получить, - это трассировка стека. Затем разбейте новую функцию на одну или несколько раз. Это проверенный метод «разделяй и властвуй». И если у вас есть 35 вызовов memset () в одной функции, это может быть хорошей идеей и с точки зрения дизайна!

Обновление: я нашел использованный пакет: ARMphetamine . Он работал для кода ARM9, который я разрабатывал, но, похоже, он не обновлялся уже довольно давно.

...