Beim Zugriff auf Strukturfelder habe ich manuell Offsets zu Adressen hinzugefügt, um Zugriff auf die Felder zu erhalten. Das ist ziemlich mühsam, schwer zu lesen und ein Maintenance-Kopfschmerz.
Gibt es eine bessere Möglichkeit, auf C-Struct-Felder zuzugreifen?
Zum Beispiel denke ich an eine Syntax wie diese:
Beispiel.h:
typedef struct { int a; int b; } MyStruct;
Beispiel:
ldr r1, [r2, #MyStruct.b] // r2 contains an address to a MyStruct
Es gibt wirklich keinen sauberen und tragbaren Weg. Die meisten Projekte, die ich gesehen habe, haben einen Build-Schritt, der eine Header-Datei mit Struktur-Offsets generiert. Es geht ein bisschen so:
1) Erstellen Sie eine C-Datei, die Ihre Offsets definiert
%Vor%2) Kompilieren Sie diese Datei mit dem Flag, um eine Assembly zu generieren (-S on Clang oder GCC). Dadurch wird eine Assemblydatei mit einer Reihe definierter Zeilen erstellt, z. B .:
%Vor%3) Verwenden Sie einige Shell-Tricks, um diese in eine Header-Datei für Ihren Assembler-Code umzuwandeln.
%Vor%Dies ergibt eine Datei, die so aussieht und in Ihre Assembly-Quellen eingefügt werden kann.
%Vor%Sie können das dann direkt verwenden.
%Vor%