Comment puis-je charger le fichier d'en-tête C avec IDAPython dans IDA Pro?


1

Comment puis-je charger le fichier d'en-tête C avec IDAPython dans IDA Pro?

J'essaye automatiquement de charger le fichier d'en-tête C avec IDAPython, tel que Load("filename.h").

1

Voir ci-dessous la citation de idc.py

def parse_decls(inputtype, flags = 0): 
    """ 
    Parse type declarations 
    @param inputtype: file name or C declarations (depending on the flags) 
    @param flags: combination of PT_... constants or 0 
    @return: number of parsing errors (0 no errors) 
    """ 
    return ida_typeinf.idc_parse_types(inputtype, flags) 


PT_FILE = 0x0001 # input if a file name (otherwise contains type declarations) 
PT_SILENT = 0x0002 # silent mode 
PT_PAKDEF = 0x0000 # default pack value 
PT_PAK1 = 0x0010 # #pragma pack(1) 
PT_PAK2 = 0x0020 # #pragma pack(2) 
PT_PAK4 = 0x0030 # #pragma pack(4) 
PT_PAK8 = 0x0040 # #pragma pack(8) 
PT_PAK16 = 0x0050 # #pragma pack(16) 
PT_HIGH = 0x0080 # assume high level prototypes 
        # (with hidden args, etc) 
PT_LOWER = 0x0100 # lower the function prototypes 

1

Eh bien, w de la réponse de souligne en fait ce que vous devriez faire. Ici, je donne une réponse plus détaillée:

En bref, créer un fichier 1.h sous votre E: conduire, remplir quelques définitions de struct et essayez dans votre fenêtre de sortie de l'IDA:

idaapi.idc_parse_types("E:\\1.h", idc.PT_FILE) 

Cette fonction retourne le numéro d'erreurs rencontrées lors de l'analyse de votre fichier .h. Si vous obtenez 0, cela signifie qu'il n'y a rien de mal dans votre fichier d'en-tête.

NOTE1: IDA Python ne cesse de changer. Le code ci-dessus fonctionne pour moi (j'utilise IDA Pro 6.8). Certains changements peuvent être nécessaires si vous utilisez une version différente. Essayez IDA Python Reference.

REMARQUE2: Vous devriez trouver les nouveaux types dans la fenêtre Types locaux (appuyez sur Maj + F1 pour l'ouvrir), qui affiche les types dans TIL. Si vous avez réellement besoin de structures (appartenant à IDB), essayez idaapi.til2idb ou idaapi.import_type pour les importer.