'STM32 embedded memory overflow/leak detection
I've been bitten in the ass a few times where I would write to an array out of scope. I have been working on a particular firmware for over 2 years and suspect an overflow which by now is close to impossible to find - for example:
uint8_t example[50];
uint8_t example2[100];
for(uint8_t i = 0; i < sizeof(example2); i++)
example[i] = i;
I understand that the above code example is primitive. It's only an example of what I am trying to describe.
Is there a package or function available that can detect these "leaks"?
Solution 1:[1]
Recent versions of GCC with the flag -Wall will detect simple errors like the problem in your example, and print a warning.
The tool Valgrind is more advanced, but also more work to configure and use correctly.
There is no tool in the universe that can detect every possible mistake, so start with the easiest to use.
Solution 2:[2]
Static analysis can only do so much, but here are a couple of the tools I'm using on a daily basis:
Also, as Tom V pointed out, turn on as many warnings as possible (-Wall is a minimum - here is a good starting set of warning flags).
Solution 3:[3]
The tool Frama-c , through the Eva plugin, allows to do value analysis: it is able to compute every possible value for each variable and then detects (among other issues) array overflows even in non trivial code source.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Tom V |
| Solution 2 | Armandas |
| Solution 3 | Guillaume Petitjean |
