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

 
 
> Что за “Reserved Address” ?, фантомный код изменяет адресс
Beginning
сообщение Dec 27 2007, 10:54
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



Есть достаточна большая программа. Вся программа работает из внешнего ОЗУ. Грузится bootloaderom из внешнего ПЗУ. Вначале программы есть модуль проверяющий корректность программы. Он подсчитывает CRC всей программы (находящуюся в ОЗУ) и сверяет с заранее установленным значением. Все переменные находятся вне прошивки, и поэтому не влияют на подсчёт. В старых версиях IAR (4…) всё работало прекрасно. Но поставил версию 5.1 и на тебе, CRC всё время не совпадает. Начал копать и выкопал что, во всей прошивке меняется один адрес (4 байта), находящийся по адресу 0x34. Посмотрел ассемблерный текст, а по этому адресу такая строка:
Цитата
DCD 0 ; Reserved Address

Я нигде в программе не использую этот адрес. В настройках линкера никаких checksum не задействовано. Пытался найти, что за зараза туда лезет в дебагере, но ничего не вышло. Приходится пропускать большие аппаратно зависимые участки кода, а в месте программы, где в железе уже есть изменения этого адреса, в дебагере нет изменений. Господа, какие будут мысли?


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
VladislavS
сообщение Dec 28 2007, 17:51
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



"Reservid adres" как раз понятно почему. Если откроешь стартап с таблицей векторов прерываний, то увидишь, что между Data abort и IRQ нет одного вектора, а это как раз 0x34. В icf вроде все в порядке. Кроме как поймать в отладчике вариантов не вижу. Чудес не бывает. Если до main память дошла неизмененная, то дальше только косяки программы. Кстати, не совсем понятно зачем программа проверяет свою цнлостность? Разве это не дело загрузчика? Хотя это и не отменяет поиск барабашки!
Go to the top of the page
 
+Quote Post
KRS
сообщение Dec 29 2007, 10:09
Сообщение #3


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(VladislavS @ Dec 28 2007, 20:51) *
между Data abort и IRQ нет одного вектора, а это как раз 0x34

Только адрес у него, не 0x34, а 0x14
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Dec 29 2007, 11:02
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата(KRS @ Dec 29 2007, 13:09) *
Только адрес у него, не 0x34, а 0x14


Ну да, вы правы. Вектор действительно 0x14. По нему команда ldr pc,[pc,#24], а по адресу 0x34 собственно адрес функции-обработчика. Так IAR-вский стартап устроен. Я как раз это и подразумевал - не думал, что надо разжевывать очевидное.
Go to the top of the page
 
+Quote Post
KRS
сообщение Dec 29 2007, 14:02
Сообщение #5


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(VladislavS @ Dec 29 2007, 14:02) *
Ну да, вы правы. Вектор действительно 0x14. По нему команда ldr pc,[pc,#24], а по адресу 0x34 собственно адрес функции-обработчика. Так IAR-вский стартап устроен.

Как раз в IAR стартапе, этот адрес пропущен! что видно в исходниках от 5.xx

Код
        SECTION .intvec:CODE:NOROOT(2)

        PUBLIC  __vector
        PUBLIC  __vector_0x14
        PUBLIC  __iar_program_start
        EXTERN  Undefined_Handler
        EXTERN  SWI_Handler
        EXTERN  Prefetch_Handler
        EXTERN  Abort_Handler
        EXTERN  IRQ_Handler
        EXTERN  FIQ_Handler

        ARM
__vector:
       ; All default exception handlers (except reset) are
       ; defined as weak symbol definitions.
       ; If a handler is defined by the application it will take precedence.
        LDR     PC,Reset_Addr          ; Reset
        LDR     PC,Undefined_Addr      ; Undefined instructions
        LDR     PC,SWI_Addr            ; Software interrupt (SWI/SVC)
        LDR     PC,Prefetch_Addr       ; Prefetch abort
        LDR     PC,Abort_Addr          ; Data abort
__vector_0x14:
        DCD     0                      ; RESERVED
        LDR     PC,IRQ_Addr            ; IRQ
        LDR     PC,FIQ_Addr            ; FIQ

Reset_Addr:     DCD   __iar_program_start
Undefined_Addr: DCD   Undefined_Handler
SWI_Addr:       DCD   SWI_Handler
Prefetch_Addr:  DCD   Prefetch_Handler
Abort_Addr:     DCD   Abort_Handler
IRQ_Addr:       DCD   IRQ_Handler
FIQ_Addr:       DCD   FIQ_Handler
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 16:43
Рейтинг@Mail.ru


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