|
Генерация HEX в Keil, Не пойму, как генерируется HEX в Keil |
|
|
|
Feb 19 2016, 13:08
|
Группа: Участник
Сообщений: 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 не менялось при изменении остальной части программы.
|
|
|
|
|
Feb 20 2016, 05:08
|
Группа: Участник
Сообщений: 8
Регистрация: 2-07-15
Пользователь №: 87 377

|
Цитата Kabdim В дизасемблере все одинаково Цитата scifi да, метрология Цитата SyncLair Попробовал создал отдельный проект-либу. Подключил либу к своему проекту и та же фигня. На ум приходит только лепить из разных hex-ов разных проектов один hex, но это чудовище Франкинштейна не очень мне нравится. Есть мнение, что, если организовать не функцию, а класс, то всё может получится. Попробую, отпишусь. Попробовал. Создал класс с одним единственным методом, объявил объект класса, разместил этот объект по нужному адресу. Прикол в том, что объект занимает 1 байт и смысл считать его CRC нет.
Сообщение отредактировал Booger - Feb 20 2016, 05:49
|
|
|
|
|
Feb 20 2016, 09:35
|

Профессионал
    
Группа: Свой
Сообщений: 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()", в дизассемблере, действительно "ничего не поменяется" :-)
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Feb 20 2016, 09:53
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(esaulenka @ Feb 20 2016, 12:35)  А эта задача в принципе честно решается? Смотря как задача ставится. Если нужна реально защищённая система с указанием возможностей врага, то всё можно спроектировать. А если задача - это "ну изобразите тут что-то такое, похожее на некую меру некой защиты", то и будет так, как вы написали: Цитата(esaulenka @ Feb 20 2016, 12:35)  Ну получим мы функцию, которая точно не изменяется после прохождения сертификации. Но никто ж не обещает, что данные ей на вход будут поступать без обработки. Или что вообще будет использоваться эта функция, а не соседняя, "слегка доработанная".
|
|
|
|
|
Feb 25 2016, 13:08
|
Группа: Участник
Сообщений: 8
Регистрация: 2-07-15
Пользователь №: 87 377

|
Добрый день!
Пока оставил эту проблему до лучших времен. Попробую реализовать совет SyncLair позже. Нужно считать только CRC, никаких больше защит не нужно. Еще раз говорю, в дизассемблере функция выглядит одинаково. Или не функцию нужно смотреть?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|