Gast
#1267680
Hi,
Auf einem ATmega163 implementiere ich AES. Ich habe nun das Problem dass
ich relativ reproduzierbar in der 8. Runde folgende Meldung erhalte:
AVR Simulator: Excessive stack overflow, stop sim.
Das kranke dabei: Ich verwende keine einzige Rekursion, wenig Variablen
auf dem Stack und eine relativ geringe Verschachtelungstiefe.
Die Hauptschleife sieht so aus:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
AddRoundKey beinhaltet nur eine simple Vorschleife mit XOR-Befehlen ShiftRows macht lediglich ein paar Swaps mit XOR SubBytes hat ebenfalls nur EINE for-Schleife GenerateNextKey beinhaltet eine 10-zeilige Schleife mit 2 if-Abfragen und definiert ebenfalls nur 2 Variablen. Lediglich MixColumns ist ein bisschen größer, hat eber ebenfalls nur eine for-Schleife und definiert ein "unsigned char col[4]". Weiters wird einige Male (aber immer auf gleichem Level) eine Funktion gf8mul aufgerufen. gf8mul definiert exakt 3 unsigned chars und hat sagenhaft riesige 6 Zeilen. Ja, wirklich, es kommt nichts vor dass "exzessiv" den Stack auffressen könnte. Vor allem: Was ich dabei nicht verstehe: Nachdem in der Schleife ja immer das gleiche gemacht wird und alles auf einer Ebene ist, kann der Stack dadurch ja nicht größer werden! Wieso kommt dann erst bei der 8-ten Runde der Stack Overflow? Irgendwie bin ich mit meinem Latein völlig am Ende, leider fehlt mir auch die Kenntnis wie ich den Stack überprüfen kann... Wie groß ist dieser überhaupt? lg divB