Aus einer Firmware erhalte ich folgenden ARM Disassembler-Code:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
Diese Mini-Subroutine dient dazu um aus einem Index eine absolute Speicheradresse zu berechnen. Beim Aufruf ist der Index-Wert in R0 und nach Rückkehr befindet sich dort die Speicheradresse.
Aus IDA erhalte ich folgendes Decompilat dazu:
1 |
|
2 |
|
3 |
|
4 |
|
Ein Aufruf davon, woanders im Code, sieht dann so aus:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
Wie passt das denn zusammen? Oben wird der Funktion mit "void" doch ganz klar KEIN Rückgabewert bescheinigt. In beiden Aufrufen wird aber genau das Gegenteil behauptet.
Im obigen Beispiel wären die Bezeichner "a1" und "v1" eigentlich R0, dann würde es wieder passen?