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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Применение буферов больше 256 байт глючит sprintf, Камень stm32L476
Димон Безпарольн...
сообщение Aug 23 2017, 15:51
Сообщение #31


Знающий
****

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



Keil 5
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение Aug 23 2017, 17:44
Сообщение #32


Знающий
****

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



Пытаюсь работать с ключом --protect_stack

Вставил функцию:

Код
void *__stack_chk_guard;


void __stack_chk_fail(void)
{
    
}


Но виснет при обращении к массивам.

Сообщение отредактировал Димон Безпарольный - Aug 23 2017, 17:45
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 23 2017, 19:27
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Михась @ Aug 23 2017, 16:12) *
При компиляции опасные функции обрамляются ватермарком и при его повреждении - вызывается специальная функция.

Малоэффективно. Вот пример перед глазами - случай автора топика: выставили ватермарк на 200 ниже SP перед входом в функцию, а автор взял и выделил в функции 400, (т.е. - начало этого массива оказалось на 200 байт ниже ватермарка) и напечатал в этот буфер скажем 150 байт - ватермарк остался нетронутым, а стек переполнился и затёр соседние данные (или они его).
Да и куда ставить этот ватермарк, если автор даже не знает размера своего стека?? smile3009.gif
Go to the top of the page
 
+Quote Post
Михась
сообщение Aug 24 2017, 02:16
Сообщение #34


Частый гость
**

Группа: Участник
Сообщений: 161
Регистрация: 29-09-10
Пользователь №: 59 816



Цитата(jcxz @ Aug 24 2017, 01:27) *
Малоэффективно. Вот пример перед глазами - случай автора топика: выставили ватермарк на 200 ниже SP перед входом в функцию, а автор взял и выделил в функции 400, (т.е. - начало этого массива оказалось на 200 байт ниже ватермарка) и напечатал в этот буфер скажем 150 байт - ватермарк остался нетронутым, а стек переполнился и затёр соседние данные (или они его).


Эффективно как раз. У автора действительно тяжелый случай, но он явно выпаливается по внешним признакам. А --protect_stack как раз хорошо помогает, когда выделили для разных задач много маленьких буферов и потом в результате ошибки (не хватило пару байт потому что пролюбили пробел например) при печати в буфер портится соседнее значение, причем не каждый раз. И вот тут такое исключение чрезвычайно полезно. У меня раз такая ошибка в релизное ПО ушла. Одного чара в буфере не хватило.
Go to the top of the page
 
+Quote Post
Михась
сообщение Aug 24 2017, 05:57
Сообщение #35


Частый гость
**

Группа: Участник
Сообщений: 161
Регистрация: 29-09-10
Пользователь №: 59 816



Цитата(Димон Безпарольный @ Aug 24 2017, 00:44) *
Пытаюсь работать с ключом --protect_stack

Вставил функцию:

Код
void *__stack_chk_guard;


void __stack_chk_fail(void)
{
    
}


Но виснет при обращении к массивам.


Применяю так:

Цитата
void * __stack_chk_guard = (void *)(0xDEADBEEF);

void __stack_chk_fail(void)
{
bitset(global_error, 10);
}


http://infocenter.arm.com/help/index.jsp?t...qs/ka16747.html



Сообщение отредактировал Михась - Aug 24 2017, 05:59
Go to the top of the page
 
+Quote Post
alag57
сообщение Aug 24 2017, 08:35
Сообщение #36


Частый гость
**

Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355



Цитата(Димон Безпарольный @ Aug 23 2017, 03:11) *
1. Буду благодарен если намекнете как.

startup_stm32l476xx.s
Цитата
Stack_Size EQU 0x400;

Go to the top of the page
 
+Quote Post
x893
сообщение Aug 24 2017, 13:32
Сообщение #37


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

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



Можно включить автоматическое пошаговое выполнение и отслеживать значение SP.
Не быстро конечно, но можно отследить всё что происходит.
Можно взять Traseanalyzer или SystemView и им красивые картинки посмотреть как стэк.
Но пошаговый - это железобетонный способ.
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение Aug 24 2017, 15:40
Сообщение #38


Знающий
****

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



Цитата(alag57 @ Aug 24 2017, 12:35) *
startup_stm32l476xx.s

Точно. Спасибо.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:30
Рейтинг@Mail.ru


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