Formatovany tisk pro 8bit
Miroslav Mraz
mrazik na volny.cz
Úterý Duben 23 16:47:00 CEST 2024
Kompilátor velikost stacku nezná. Může být od pár bytů na opravdu malém
MCU po 4MiB na vlákno v OS. Takže to je past, především pro bare-metal a
C++. Můžete jednoduše vytvořit lokální proměnnou pro objekt, který může
uvnitř obsahovat jakékoli buffery a stack přeteče. Jinak řečeno - past
je v tom, že je to jednoduché a nijak to nevaruje.
Sice existují nástroje na statickou analýzu stacku, ale co jsem to před
léty zkoušel, stejně to ukazovalo blbosti. Co se osvědčilo je popsat na
začátku celý stack nějakým vzorem, třeba 0xDEADBEEF, nechat program
běžet a pak se debugerem podívat, kde tento vzor končí, tedy je přepsán
programem. Předpokladem je, že stack je za .bss a není mezi tím halda.
Pokud tam halda je, lze takto zjistit i její použití.
Mrazík
On 23. 04. 24 15:12, Martin Záruba wrote:
> Ještě jeden postřeh: Kompilátoru vůbec nevadí nesmyslná deklarace
> velikosti pole jako lokální proměnné. ...
>
>
Další informace o konferenci Hw-list