Если вы используете процессор с блоком управления памятью ваше оборудование может сделать это для вас с минимальными затратами программного обеспечения. Большинство современных 32-битных процессоров имеют их и все больше и больше 32-битных микроконтроллеров.
Настройте область памяти в MMU, которая будет использоваться для стека. Он должен быть ограничен двумя областями памяти, где MMU не разрешает доступ. Когда приложение будет запущено, вы получите исключение/прерывание, как только вы переполните стек.
Поскольку в момент возникновения ошибки вы получаете исключение, вы точно знаете, где в вашем приложении стек был плохим. Вы можете посмотреть стек вызовов, чтобы точно узнать, как вы добрались до своего места. Это значительно облегчает поиск вашей проблемы, чем пытаться выяснить, что не так, обнаружив вашу проблему задолго до того, как это произошло.
Я успешно использовал это на процессорах PPC и AVR32. Когда вы начинаете использовать MMU, вы чувствуете, что это пустая трата времени, так как вы отлично справлялись с этим в течение многих лет, но как только вы увидите преимущества исключения в точном месте, где возникает ваша проблема с памятью, вы никогда не вернетесь. MMU также может обнаруживать обращения нулевого указателя, если вы запретите доступ к памяти в нижнем парке вашего бара.
Если вы используете RTOS, ваш MMU защищает память и стеки других задач, ошибки в одной задаче не должны влиять на них.Это означает, что вы также можете легко перезапустить свою задачу, не затрагивая другие задачи.
В дополнение к этому в процессоре с MMU обычно также много ловушек, ваша программа намного реже переполняет ваш стек, и вам не нужно тонко настраивать все, чтобы вы могли нормально работать с небольшим печать памяти.
Альтернативой этому было бы использование средств отладки Процессора, чтобы вызвать прерывание в доступе к памяти в конец вашего стека. Это, вероятно, будет очень специфичным для процессора.
Какой конкретно встроенный процессор? На самом деле не существует общего решения, которое все процессоры будут реализовывать одинаково, так как каждый из них совершенно другой. –
Независимый от процессора алгоритм или техника. Техника, используемая хакером в среде ПК, может быть применена путем игры с указателями и сбой вашей системы на встроенном sw. Это уменьшает, как защитить обратный адрес в области вашего стека. – 2009-07-27 01:04:37
Переполнением стека вы имеете в виду, когда память стека исчерпана слишком большим количеством стека вызовов? например рекурсивная функция слишком много уровней? Защита обратных адресов больше связана с предотвращением переполнения буфера в стеке, чем «переполнение стека». –