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