Ich versuche, die Variablennamen einer Struktur innerhalb C. Beispiel zu finden:Erstellen Compile-Zeit Variable Offset Map
def.h
typedef struct
{
int fov_one;
int fov_two;
int timing_chain;
...
...
float ratio;
float spare_floats[15];
}PARAMETERS;
Die Struktur Plätze für bis zu 200 Parameter hält, aber nur einige von ihnen sind zu dieser Zeit in Verwendung. Derzeit werden die Werte innerhalb der Struktur PARAMETERS mit einer Binärdatei gefüllt. Einige Benutzer möchten jedoch einen oder zwei der Werte zur Laufzeit ändern, nachdem sie ausgefüllt wurden. Ich möchte die Möglichkeit schaffen, einen Wert basierend auf einer String-Version des Variablennamens zu ändern. Wenn ich zum Beispiel das variable Verhältnis ändern möchte, möchte ich, dass der Benutzer in der Lage ist, eine Zeichenfolge "Ratio .25" einzugeben und den aktuellen Wert von "Ratio" durch ".25" zu ersetzen.
Von dem, was ich gelesen habe, ist es nicht möglich, eine Variable basierend auf einer String-Version des Variablennamens in C zu finden, da Reflection nicht vorhanden ist. Momentan denke ich daran, den Header zu analysieren, um den Variablennamen zu erhalten, aber jemand erwähnte, dass es möglich sein könnte, die Namen vom Linker zu bekommen, bevor sie weggestreift werden. Soweit ich weiß, entfernt der Compiler/Linker die Variablennamen während der Kompilierung und verwendet Adressen, um auf Variablen zuzugreifen, nicht auf Symbole.
Ich möchte wissen, ob es möglich ist, die Symbolzuordnung auszudrucken, die den Variablennamen und den Offset enthält, den der Compiler/Linker erstellt.
Mit den gcc Optionen
gcc -o foo foo.c -Wl,Map,foo.map
erstellt eine Karte, aber enthält nicht die Variablennamen der Struktur.
Ist es möglich, die vom Compiler/Linker zur Compilierzeit erstellte Variable-Offset-Map zu extrahieren?
Die Namen der Felder sind zur Kompilierungszeit bekannt, daher müssen Sie eine Funktion erstellen, die über jedes dieser 200 Felder und die Schlüsselwörter informiert ist, die für die Aktualisierung und Zuordnung der Felder verwendet werden. – dbush