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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Генерация HEX в Keil, Не пойму, как генерируется HEX в Keil
Booger
сообщение Feb 19 2016, 13:08
Сообщение #1





Группа: Участник
Сообщений: 8
Регистрация: 2-07-15
Пользователь №: 87 377



Добрый день!
Возникла необходимость кусок кода, а точнее функцию, выделить в отдельную, не занятую область. С этим разобрался. Функция в отдельном файле test_file.c

Код
__attribute__((section(".ARM.__at_0x08012B00"))) float test(float t1, float t2, float t3)  
{
    return (t1 * t2 + t3);    
}

всё хорошо, область не занятая
вот выписки из map файла
сама функция (кстати, не пойму почему адрес 0x08012b01, а не 0x08012b00?)
Код
test(float, float, float)            0x08012b01   Thumb Code    30  metrologicalcalculation.o(.ARM.__at_0x08012B00)

секция
Код
.ARM.__at_0x08012B00                     0x08012b00   Section        0  test_file.o(.ARM.__at_0x08012B00)

генерируется hex, всё замечательно
Код
:102AE00000000000000000000000000000000000E6
:102AF00000000000000000000000000000000000D6
:102B00002DE9F04105460E46144631462846FDF7AC
:102B10007DF907462146FDF7A3F8BDE8F0810000E6
:102B200000000000000000000000000000000000A5
:102B30000000000000000000000000000000000095

но при изменении кода, никак не касающегося этой функции! имею, что в этом куске hex происходят изменения во второй строке
Код
:102AE00000000000000000000000000000000000E6
:102AF00000000000000000000000000000000000D6
:102B00002DE9F04105460E46144631462846FDF7AC
:102B100039F907462146FDF75FF8BDE8F08100006E
:102B200000000000000000000000000000000000A5
:102B30000000000000000000000000000000000095

не могу понять почему?
Задача, выделить эту функцию, посчитать ее CRC, и чтобы это CRC не менялось при изменении остальной части программы.
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Feb 19 2016, 13:18
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Надо посмотреть дизасемблером разницу и станет понятно. Палльцем в небо: там вызываются функции для плавающей арифметике и при этомих адреса меняются при изменении кода.
>> сама функция (кстати, не пойму почему адрес 0x08012b01, а не 0x08012b00?)
Особенности вызова Thumb Code.
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 19 2016, 13:57
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Booger @ Feb 19 2016, 16:08) *
Задача, выделить эту функцию, посчитать ее CRC, и чтобы это CRC не менялось при изменении остальной части программы.

Метрология что ли какая-то? Кстати, CRC от врагов не защищает. От врагов нужна криптостойкая хеш-функция.
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Feb 19 2016, 16:31
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Вам нужно сформировать ABI - binary interface -- и скопмпилировать его отдельно и по фиксированному адресу разместить не функцию, а таблицу указателей на функции. Таки образом вам нужно отдельно скомпилировать эти функции в отдельном проэкте, а в другом проэкте пользоваться этими функциями через структуры и таблицу указателей -- посмотрите как это сделано у NXP когда они встраивают код в спец память контроллера. (LPC11u68 например) уверен так сделано и у некоторых других производилей МК.

А вот как объяснить это компилятору (что функции main() не существует) -- в случае с Keil не представляю.


--------------------
Go to the top of the page
 
+Quote Post
Booger
сообщение Feb 20 2016, 05:08
Сообщение #5





Группа: Участник
Сообщений: 8
Регистрация: 2-07-15
Пользователь №: 87 377



Цитата
Kabdim

В дизасемблере все одинаково

Цитата
scifi

да, метрология

Цитата
SyncLair

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

На ум приходит только лепить из разных hex-ов разных проектов один hex, но это чудовище Франкинштейна не очень мне нравится.

Есть мнение, что, если организовать не функцию, а класс, то всё может получится. Попробую, отпишусь.


Попробовал.
Создал класс с одним единственным методом, объявил объект класса, разместил этот объект по нужному адресу.
Прикол в том, что объект занимает 1 байт и смысл считать его CRC нет.

Сообщение отредактировал Booger - Feb 20 2016, 05:49
Go to the top of the page
 
+Quote Post
редактор
сообщение Feb 20 2016, 06:32
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Если большой объем программы, то возможно смотрите не тот сегмент.
Преобразуйте Hex бинарник и бинарники (образы прошивок) уже сравнивайте.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 20 2016, 07:40
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Booger @ Feb 20 2016, 08:08) *
Попробовал создал отдельный проект-либу. Подключил либу к своему проекту и та же фигня.

Всё правильно SyncLair написал. То, что вы игнорируете его совет, - это ваши проблемы.

Кстати, а вот эта штука с проверкой целостности функции - это нужно по-честному сделать или абы так, чтобы отстали? Потому что по-честному там будет ещё десяток нюансов, о которых вы пока не догадываетесь.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 20 2016, 08:15
Сообщение #8


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(scifi @ Feb 20 2016, 10:40) *
Потому что по-честному там будет ещё десяток нюансов, о которых вы пока не догадываетесь.
И каких же? Вроде ничего особенного...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 20 2016, 08:31
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(demiurg_spb @ Feb 20 2016, 11:15) *
И каких же? Вроде ничего особенного...

Ну, я немного преувеличил, но немного. Скажем, для защиты от врагов CRC не годится, как я уже писал выше. Также для защиты от врагов нужно залочивать МК. В общем, как-то так.
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Feb 20 2016, 09:27
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Цитата(Booger @ Feb 20 2016, 08:08) *
В дизасемблере все одинаково

Приведите листинг 1 и 2 варианта, только так что бы было видно хексы-асемблерная команда. Как могут быть дизасемблерованые команды быть полностью одинаковыми при разном бинарном наполнении. Это же не х86 в котором можно десяток байт только префиксов вставить.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Feb 20 2016, 09:35
Сообщение #11


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(scifi @ Feb 20 2016, 10:40) *
Всё правильно SyncLair написал. То, что вы игнорируете его совет, - это ваши проблемы.
Кстати, а вот эта штука с проверкой целостности функции - это нужно по-честному сделать или абы так, чтобы отстали? Потому что по-честному там будет ещё десяток нюансов, о которых вы пока не догадываетесь.


А эта задача в принципе честно решается?
Ну получим мы функцию, которая точно не изменяется после прохождения сертификации. Но никто ж не обещает, что данные ей на вход будут поступать без обработки. Или что вообще будет использоваться эта функция, а не соседняя, "слегка доработанная".

Цитата(Kabdim @ Feb 20 2016, 12:27) *
Приведите листинг 1 и 2 варианта, только так что бы было видно хексы-асемблерная команда. Как могут быть дизасемблерованые команды быть полностью одинаковыми при разном бинарном наполнении. Это же не х86 в котором можно десяток байт только префиксов вставить.


Так это от уровня дизассемблера зависит. Если он развернёт команду "branch по адресу 0xabcd" в "branch в функцию def()", в дизассемблере, действительно "ничего не поменяется" :-)


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 20 2016, 09:47
Сообщение #12


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



По-моему, во втором сообщении уже дан ответ.
У процессора есть плавающая арифметика? Если нет, то вызываются функции. Которые размещаются, где понравится компилятору.
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 20 2016, 09:53
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(esaulenka @ Feb 20 2016, 12:35) *
А эта задача в принципе честно решается?

Смотря как задача ставится. Если нужна реально защищённая система с указанием возможностей врага, то всё можно спроектировать. А если задача - это "ну изобразите тут что-то такое, похожее на некую меру некой защиты", то и будет так, как вы написали:
Цитата(esaulenka @ Feb 20 2016, 12:35) *
Ну получим мы функцию, которая точно не изменяется после прохождения сертификации. Но никто ж не обещает, что данные ей на вход будут поступать без обработки. Или что вообще будет использоваться эта функция, а не соседняя, "слегка доработанная".
Go to the top of the page
 
+Quote Post
x893
сообщение Feb 20 2016, 10:01
Сообщение #14


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

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



CRC32 вполне подходит для защиты.
Код по дисассемблеру посмотрите - там всё понятно будет.
Тем более в Keil это не проблема.
Go to the top of the page
 
+Quote Post
Booger
сообщение Feb 25 2016, 13:08
Сообщение #15





Группа: Участник
Сообщений: 8
Регистрация: 2-07-15
Пользователь №: 87 377



Добрый день!

Пока оставил эту проблему до лучших времен. Попробую реализовать совет SyncLair позже.
Нужно считать только CRC, никаких больше защит не нужно.
Еще раз говорю, в дизассемблере функция выглядит одинаково. Или не функцию нужно смотреть?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th June 2025 - 20:12
Рейтинг@Mail.ru


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