реклама на сайте
подробности

 
 
> Адреса векторов прерывания
d7d1cd
сообщение Mar 31 2012, 13:55
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Привет всем! Есть устройство на микроконтроллере MSP430F149. Из этого микроконтроллера слита прошивка и дизассемблирована с помощью IDA. Далее, перейдя в область памяти где хранятся адреса векторов прерывания, я определил адреса процедур обработки этих прерываний. И тут я увидел, что некоторые вектора указывают не на команды микроконтроллера, а просто на данные в памяти.
Например, возьмем вектора прерываний асинхронных приемо-передатчиков. Только вектор URXIFG1 указывает на область памяти с инструкциями микроконтроллера. Остальные указывают на область памяти, где инструкций нет.
Объясните, пожалуйста, что это значит? Может просто IDA не распознала инструкций?

P.S. Устройство может принимать и отправлять данные через RS485 или через оптический порт, то есть, как я понимаю, хотя бы у одного передатчика должны быть "активны" оба вида прерывания. И еще в устройстве есть несколько микросхем памяти, в которые (и из которых) микроконтроллер пишет (читает) данные.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
d7d1cd
сообщение Apr 2 2012, 14:41
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Вот таблица векторов прерывания:
Код
0000FFE0  00 12 34 21 A0 B8 C8 B8  00 12 00 12 00 12 FC 14
0000FFF0  F4 B8 1E B9 00 12 00 12  00 12 00 12 E0 14 00 12

Далее привожу куски кода из IDA, куда указывают вектора обоих USART-ов:

USART1 transmit (0xB8A0)
Код
seg000:0000B8A0                 .byte    4
seg000:0000B8A1                 .byte  12h
seg000:0000B8A2                 .byte  54h; T


USART1 receive (0xB8C8)
Код
seg000:0000B8C8                 push.w  R4
seg000:0000B8CA                 mov.b   &byte_914, R4
seg000:0000B8CE                 cmp.w   #8Ch, R4


USART0 transmit (0xB8F4)
Код
seg000:0000B8F4                 .byte    4
seg000:0000B8F5                 .byte  12h
seg000:0000B8F6                 .byte  54h; T


USART0 receive (0xB91E)
Код
seg000:0000B91E                 .byte    4
seg000:0000B91F                 .byte  12h
seg000:0000B920                 .byte  54h; T


Подскажите, что это значит?
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 3 2012, 08:31
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(d7d1cd @ Apr 2 2012, 19:41) *
Подскажите, что это значит?

Это видимо означает, что ваша IDA плохо отрабатывает дизасемблирование для MSP430. Насколько я себе представляю два байта 0x04 0x12 с учетом little-endian представляют из себя код операции 0x1204 PUSH.W R4. Можете сами проверить, заглянув в User's Manual в таблицу Figure 3−20. Core Instruction Map, а затем глянув отписание команды PUSH в разделе 3.4.2 Single-Operand (Format II) Instructions там же.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Apr 3 2012, 14:33
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Цитата(rezident @ Apr 3 2012, 12:31) *
Это видимо означает, что ваша IDA плохо отрабатывает дизасемблирование для MSP430. Насколько я себе представляю два байта 0x04 0x12 с учетом little-endian представляют из себя код операции 0x1204 PUSH.W R4. Можете сами проверить, заглянув в User's Manual в таблицу Figure 3−20. Core Instruction Map, а затем глянув отписание команды PUSH в разделе 3.4.2 Single-Operand (Format II) Instructions там же.


Спасибо за помощь. Скорее всего, вы правы. Используемый вектор, например, начинается с этой команды...
Можно Вас попросить дать ссылку на эти документы. И еще такой вопрос: в MSP все команды занимают 2 байта?

Сообщение отредактировал d7d1cd - Apr 3 2012, 14:54
Go to the top of the page
 
+Quote Post
MaslovVG
сообщение Apr 3 2012, 15:00
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 210
Регистрация: 24-01-05
Из: Россия Волгодонск
Пользователь №: 2 134



Цитата(d7d1cd @ Apr 3 2012, 18:33) *
Спасибо за помощь. Скорее всего, вы правы. Используемый вектор, например, начинается с этой команды...
Не подскажите, какую версию IDA использовать?

Здесь дело не в IDA. Программа не может распознать данные это или программа, если на эти адреса нет ссылок из программы. Дизаасемблер потому и называется интерактивным, что работает совместно с оператором. Просматривая дизассемблированный текст, в нужныж местах, по адресам векторов прерываний, установите вид данных Code и повторите дизассеблирование. Просмотрите листинг на предмет "ереси" програмного кода" это могут быть таблицы данных или векторов. Некоторые подпрограммы могут вызываться через таблицы, тогда их коды могут быть неправильно восприняты IDA как данные. В общем дизассемблирование это некоторый вид искуства. Влоб дизассемблируются только простейшие программы, без хитростей и приемов защиты от взлома.
Это касается любого процессора.
Поищите книги Касперского по IDA многое прояснится.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Apr 3 2012, 16:32
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Цитата(MaslovVG @ Apr 3 2012, 19:00) *
Здесь дело не в IDA. Программа не может распознать данные это или программа, если на эти адреса нет ссылок из программы. Дизаасемблер потому и называется интерактивным, что работает совместно с оператором. Просматривая дизассемблированный текст, в нужныж местах, по адресам векторов прерываний, установите вид данных Code и повторите дизассеблирование. Просмотрите листинг на предмет "ереси" програмного кода" это могут быть таблицы данных или векторов. Некоторые подпрограммы могут вызываться через таблицы, тогда их коды могут быть неправильно восприняты IDA как данные. В общем дизассемблирование это некоторый вид искуства. Влоб дизассемблируются только простейшие программы, без хитростей и приемов защиты от взлома.
Это касается любого процессора.
Поищите книги Касперского по IDA многое прояснится.


Спасибо большое! Все получилось. Я установил курсор на адрес вектора прерывания, нажал кнопку Convert to instruction и вуа-ля! Там где раньше дизассемблер показывал данные, появились инструкции процессора, где в самом конце стоит команда reti, то есть возврат из прерывания.
Go to the top of the page
 
+Quote Post
MaslovVG
сообщение Apr 3 2012, 17:12
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 210
Регистрация: 24-01-05
Из: Россия Волгодонск
Пользователь №: 2 134



Цитата(d7d1cd @ Apr 3 2012, 20:32) *
Спасибо большое! Все получилось. Я установил курсор на адрес вектора прерывания, нажал кнопку Convert to instruction и вуа-ля! Там где раньше дизассемблер показывал данные, появились инструкции процессора, где в самом конце стоит команда reti, то есть возврат из прерывания.

Это только начало. Необходимо найти все таблицы и все данные. Иначе после добавления даже одной команды после обратной трансляции программа будет неработоспособной. Тем паче в таких программах как правило встроен контроль целоности. После сброса программа зачастую производит контроль кода по контрольным суммам.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- d7d1cd   Адреса векторов прерывания   Mar 31 2012, 13:55
- - bigal   При передаче прерывания могут не использоваться, п...   Apr 1 2012, 21:03
- - hash20   d7d1cd, В принципе для 485го вполне достаточно тол...   Apr 2 2012, 07:22
- - MrYuran   Цитата(d7d1cd @ Mar 31 2012, 17:55) Тольк...   Apr 2 2012, 07:45
||- - d7d1cd   Цитата(MaslovVG @ Apr 3 2012, 21:12) Это ...   Apr 4 2012, 02:53
||- - MaslovVG   Цитата(d7d1cd @ Apr 4 2012, 06:53) Скажит...   Apr 4 2012, 03:23
|- - rezident   Цитата(d7d1cd @ Apr 3 2012, 19:33) Можно ...   Apr 3 2012, 15:34
- - Psych   Да в адреса векторов можно запихнуть чо угодно. Гл...   Apr 3 2012, 05:28
- - d7d1cd   Подскажите еще. Почему, если не разобрать все мест...   Apr 4 2012, 16:14
|- - MaslovVG   Цитата(d7d1cd @ Apr 4 2012, 20:14) Подска...   Apr 4 2012, 18:45
- - d7d1cd   Можно Вас попросить маленький пример на ассемблере...   Apr 5 2012, 03:00
|- - MaslovVG   Цитата(d7d1cd @ Apr 5 2012, 07:00) Можно ...   Apr 5 2012, 03:46
- - d7d1cd   Подумал тут вот над чем. В моей прошивке есть мест...   Apr 6 2012, 16:16
|- - MaslovVG   Цитата(d7d1cd @ Apr 6 2012, 20:16) Подума...   Apr 6 2012, 18:26
|- - d7d1cd   Цитата(MaslovVG @ Apr 6 2012, 22:26) В пр...   Apr 7 2012, 08:30
|- - MaslovVG   Цитата(d7d1cd @ Apr 7 2012, 12:30) Давайт...   Apr 7 2012, 09:12
- - d7d1cd   Вот у меня микроконтроллер MSP430F149. В нем реали...   Apr 8 2012, 08:23
|- - MaslovVG   Цитата(d7d1cd @ Apr 8 2012, 12:23) Вот у ...   Apr 9 2012, 15:33
|- - MrYuran   Цитата(MaslovVG @ Apr 9 2012, 19:33) Отсу...   Apr 10 2012, 05:10
|- - d7d1cd   Цитата(MaslovVG @ Apr 9 2012, 19:33) Что ...   Apr 10 2012, 09:28
|- - MaslovVG   Цитата(d7d1cd @ Apr 10 2012, 13:28) В кни...   Apr 11 2012, 08:12
- - d7d1cd   Подскажите отладчик в котором можно "стартану...   Apr 11 2012, 15:34
|- - MaslovVG   Цитата(d7d1cd @ Apr 11 2012, 19:34) Подск...   Apr 11 2012, 17:49
|- - d7d1cd   Цитата(MaslovVG @ Apr 11 2012, 21:49) Я с...   Apr 13 2012, 02:50
|- - MaslovVG   Цитата(d7d1cd @ Apr 13 2012, 06:50) Спаси...   Apr 13 2012, 03:14
|- - d7d1cd   Цитата(MaslovVG @ Apr 13 2012, 07:14) Ско...   Apr 13 2012, 14:26
|- - MaslovVG   Цитата(d7d1cd @ Apr 13 2012, 18:26) А это...   Apr 15 2012, 12:29
- - rezident   Прошу модератора раздела обратить внимание на злос...   Apr 19 2012, 17:13
- - IgorKossak   Сообщения с нарушениями скрыл. Модератор.   Apr 19 2012, 17:22
- - d7d1cd   Прошу прощения за нарушения... Подскажите, в каком...   Apr 22 2012, 06:16
- - rezident   Цитата(d7d1cd @ Apr 22 2012, 11:16) Прошу...   Apr 23 2012, 15:02
- - d7d1cd   Цитата(rezident @ Apr 23 2012, 19:02) Обс...   Apr 23 2012, 16:39


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 04:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01865 секунд с 7
ELECTRONIX ©2004-2016