Easyelectronics.ru • Просмотр темы - Дизасм и отладка MC68HC08AZ60

Easyelectronics.ru

Электроника для всех
Текущее время: 18 авг 2018, 23:14

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Дизасм и отладка MC68HC08AZ60
СообщениеДобавлено: 16 дек 2017, 17:40 
Только пришел

Зарегистрирован: 20 окт 2017, 18:14
Сообщения: 12
Возникла необходимость разобраться в коде MC68HC08AZ60. Понятно , что с помощью IDA.
Однако в процессе выснилось, что ряд областей памяти не дизасмится, видимо потому что нет на них условных и безусловных переходов. Например возникают вот такие странные констукции
dbnz x, loc_7B3B
FLASH_2_3:7B97 dbnz x, loc_7B50+2
FLASH_2_3:7B99 dbnz x, loc_7B65
FLASH_2_3:7B9B dbnz x, loc_7B78
FLASH_2_3:7B9D dbnz x, loc_7B92
FLASH_2_3:7B9F inc , x
FLASH_2_3:7BA0 brclr 4, byte_7C, loc_7BC0+2
FLASH_2_3:7BA3 rts

или вот переходы,которые по видимому вычислить iDA
and $49, x1
jmp , x
Отсюда вопрос-нельзя ли использовать еще какой нибудь интсрументарий типа других дизасмов или отладчиков для продвижения в разборе кода?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дизасм и отладка MC68HC08AZ60
СообщениеДобавлено: 17 дек 2017, 19:52 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 4835
Все сегменты памяти определены ? И они верных размеров?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дизасм и отладка MC68HC08AZ60
СообщениеДобавлено: 17 дек 2017, 21:18 
Только пришел

Зарегистрирован: 20 окт 2017, 18:14
Сообщения: 12
dosikus_2 писал(а):
Все сегменты памяти определены ? И они верных размеров?

В IDA под этот проц нормально сделана настройка сегментов памяти, они четко находятся. Но видимо проблема в том что есть регистр H:X, и разными коммандами типа inc x можно им оперировать, но тогда скажем jmp x не будет ясно дизасемблеру куда переходить точно, так как значение x будет переменным. Соответственно дизасм не идет по этому точному адресу и не дизасмит там.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дизасм и отладка MC68HC08AZ60
СообщениеДобавлено: 17 дек 2017, 21:22 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 4835
Моторолу не терзал, врать не буду.
Но посмотри на авр - все вроде хорошо и сегменты верны и дизасмит верно, но то что к флэши можно обращаться и как к байту в упор не знает .
Отчего многое идет лесом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дизасм и отладка MC68HC08AZ60
СообщениеДобавлено: 18 дек 2017, 08:27 
Старожил

Зарегистрирован: 06 фев 2011, 15:16
Сообщения: 614
Откуда: Челябинск
sRED писал(а):
dosikus_2 писал(а):
Все сегменты памяти определены ? И они верных размеров?

В IDA под этот проц нормально сделана настройка сегментов памяти, они четко находятся. Но видимо проблема в том что есть регистр H:X, и разными коммандами типа inc x можно им оперировать, но тогда скажем jmp x не будет ясно дизасемблеру куда переходить точно, так как значение x будет переменным. Соответственно дизасм не идет по этому точному адресу и не дизасмит там.
Скорее всего там какая-то таблица с данными. Или нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дизасм и отладка MC68HC08AZ60
СообщениеДобавлено: 18 дек 2017, 17:12 
Только пришел

Зарегистрирован: 20 окт 2017, 18:14
Сообщения: 12
Bill писал(а):
Скорее всего там какая-то таблица с данными. Или нет?


В принципе регист H:X это 16 битов, указывающие на адрес в памяти. Фактически это указатель на байт данных в памяти. Как вариант, манипулирование с H:X для работы с таблицей данных также возможно.
ну вот например
clrh ; assures h=0
ldx $1000 ; pointer is an 8 bit offset
lda table,x ;загружаем в регистр A байт из адреса определяемого H=0:X=table+x=table+$1000
sta T1MODH
lda table+1,x ;загружаем в регистр A байт из адреса определяемого H=0:X=table+1+x
sta T1MODH+1

Но в данном варианте мы просто загружаем данные из НЕИЗВЕСТНОГО для дизассмеблера места(он же не может сам вычислить table+$1000), но пройдя дальше по коду мы не теряем сути кода. То есть код мы понимаем, просто не знаем какие данные будут загружены из таблицы.

Однако есть куча операций использующие переходы и ветвления которые адресуются по H:X

То есть например
LDHX #$1010
JMP ,X
То есь в HX будет загружена величина $1010, и переход должен будет произойти по адресу $1010. Естественно дизасм не будет знать что надо перейти на $1010 и не произведет с этого адреса дизасемблирование-> получим недизассемблированную область памяти и ли при принудительном дизасме произойдет скажем неправильное дизассемблирование скажем с адреса $1009, что приведет к искажению кода и потери логики в дизасеблированном тексте.

Но вариант LDHX #$1010 , самый просто й. Тут можно ручками перейти на LDHX #$1010 изадать дизассемблиование с этого адреса. Проблема в том,когда начинается манипулирование регистрами HX с помощью разных операций, и тогда перед выполнением JMP,X не ясно содержимое HX.

Вариант в лоб- это идти по всем операцием и "на бумажке" высчитывать содержание регистров в каждой точке. Либо есть еще какие-то более производительные варианты разбора кода?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дизасм и отладка MC68HC08AZ60
СообщениеДобавлено: 18 дек 2017, 17:51 
Старожил

Зарегистрирован: 27 апр 2013, 13:53
Сообщения: 740
Кстати есть новость близкая данному топику
Компания Avast открыла исходные тексты декомпилятора машинного кода


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дизасм и отладка MC68HC08AZ60
СообщениеДобавлено: 18 дек 2017, 19:45 
Только пришел

Зарегистрирован: 13 янв 2014, 09:46
Сообщения: 12
По своему опыту скажу, в команду типа "jmp x" компилятором иногда развертывается си-шная конструкция switch. И "x" при этом указывает на таблицу в памяти, где адреса переходов хранятся.
Да, IDA это просчитывать не умеет и приходится делать вручную.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дизасм и отладка MC68HC08AZ60
СообщениеДобавлено: 19 дек 2017, 01:02 
Только пришел

Зарегистрирован: 20 окт 2017, 18:14
Сообщения: 12
limgwa писал(а):
По своему опыту скажу, в команду типа "jmp x" компилятором иногда развертывается си-шная конструкция switch. И "x" при этом указывает на таблицу в памяти, где адреса переходов хранятся.
Да, IDA это просчитывать не умеет и приходится делать вручную.

Согласен, наблюдая манипуляции в коде с полурегистром X, тоже посетила мысль что возможно это структура switch -case.
Значит придется пробовать идти самым длинным путем- просчитывать "ручками" переходы.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB