Parsen von C-Header Files, bestimmen von Strukturgrössen



  • Hallo,
    in einem Projekt an dem ich gerade arbeite wäre es Sinnvoll einen C-Header zu parsen um die größe der definierten Datenstrukturen und variablen zu bestimmen.

    Ich habe überlegt, ob es nicht vielleicht möglich ist einen C-Compiler dafür zu verwenden, evtl. dann das mappfile etc. zu parsen, oder Teile eines C-Compilers zu benutzten.

    Als Ausgabe stelle ich mir einen Liste vor:

    var_or_struct_name[64],u32 size,
    var_or_struct_name[64],u32 size,
    ....

    Was vermutlich Sinnvoll wäre wenn die in dem zu Untersuchenden Header per #include eingebunden Zusatzheader mitinterpretiert würden, worauf ich aber auch der Einfachheit zuliebe verzichten kann.
    Ich habe den Vorteil das in den zu untersuchenden Headerfiles nur bestimmte Datentypen vorkommen werden die sich direkt aus C Datentypen ableiten (u8 unsigned char, u16 unsigned short etc..).

    Hat jemand einen Lösungsansatz für mich?

    Mit freundlichem Gruß
    Arne



  • C zu parsen ist echt nicht einfach und dann musst du auch noch wissen, wie der Compiler die Strukturen packt (also padding etc.). Auch einen bestehenden C Compiler zu modifizieren stelle ich mir als recht kompliziert vor. Vielleicht ist das eher mit dem relativ jungen clang möglich.

    Ansonsten bleibt dir natürlich noch

    #include "foo.h"
    #include <stdio.h>
    
    int main() {
      printf("%lu\n", sizeof(Struktur));
    }
    


  • Daran habe ich noch nicht gedacht, ein Programm generisch zu schreiben welches meinen header einbindet und zu übersetzten.
    Trotzdem müsste ich dann vorher wissen wleche Strukturen existieren um dann die grösse bestimmen zu können.

    Das Packing oder Padding ist bekannt und wäre 1. (#pragma pack(push, 1))

    Gruß
    Arne


Log in to reply