Forum: Mikrocontroller und Digitale Elektronik Data Abort Exception auf at91sam7x256


von Marcel B. (cable545)


Lesenswert?

Hallo,

ich ekomme durch einen nicht nachvollziehbaren Fehler eine Data Abort 
Exceoption, auf einem at91sam7x256, geschmissen. Warum kann ich nicht 
sagen, daher poste ich einfach mal den relevanten Code.
1
void ecbMode(char* key)
2
{
3
  ...
4
  char expandedKeys[240] = { 0 };
5
  ...
6
  aesEncrypt(..., key, expandedKeys);
7
  ...    
8
}
9
10
11
void aesEncrypt(..., char* key, char* expandedKey)
12
{
13
  char roundKey[16] = { 0 };
14
  expandKey(expandedKey, expandedKeySize, cipherKey, keySize);
15
  ...
16
  roundKey[0] = expandedKey[0];        // DATA ABORT EXCEPTION
17
  ...
18
}

Nachdem expandKey(); durchgeführt wurde(darin wird einfach der 16 Byte 
lange Schlüssel auf maximal 240 Byte vergrößert), möchte ich gerne 
einzelne Werte aus diesem Array anderen Variablen zuweisen. Aber genau 
in diesem Augenblick knallt es immer. Wenn ich in Keil das Programm 
debuge, sehe ich auch, dass in expandedKeys die Werte genau so drin 
stehen, wie sie sollen. Aber wenn ich nun einen Wert daraus lese, 
bekomme ich die Exception geworfen. Ich hab keine Ahnung warum. Ich 
stehe voll auf dem Schlauch. Hat irgendjemand ne Ahnung was ich hier 
falsch mache?

: Bearbeitet durch User
von Stack (Gast)


Lesenswert?

Marcel B. schrieb:
> void ecbMode(char* key)
> {
>         ...
>   char expandedKeys[240] = { 0 };
>         ...
>   aesEncrypt(..., key, expandedKeys);
>   ...
> }

Könnte es sein, dass char exp... auf dem Stack liegt? Was übergibst du 
dann der Funktion?

Schreib:
static char expandedKeys[240] = { 0 };
Beim zweiten Eintritt musst die die Nullen von Hand ins array schreiben.

von Detlef K. (adenin)


Lesenswert?

Auf welche Adresse zeigt roundKey ?
Wenn der Pointer ins "Irgendwo" zeigt, dann kann es bei einen 
Schreibzugriff zu dieser Exception kommen.

von Marcel B. (cable545)


Lesenswert?

Ähhmmm okay. Das Problem hat sich erledigt. Ich habe meinen Fehler 
gefunden. Ich nutze in der Funktion expandKey() eine andere Funktion die 
aus Versehen über ein zu kleines Array hinwegschreibt. Dadurch 
überschreibe ich eine andere Variable usw.
Ich danke Euch trotzdem für die Tipps. Gute Nacht!!!

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.