""" IDAPython script to export DOT files of function graphs. Example usage (via IDA autonomous mode): ida.exe -A -S_export_fimages.py "" [ ...] """ import os import idc import idaapi import ida_gdl def main(): if len(idc.ARGV) < 3: # requires output directory and function VAs argument(s) idc.qexit(-1) # wait for auto-analysis to finish idc.auto_wait() out_dir = idc.ARGV[1] fvas = [int(fva, 0x10) for fva in idc.ARGV[2:]] idb_name = os.path.split(idc.get_idb_path())[-1] for fva in fvas: fstart = idc.get_func_attr(fva, idc.FUNCATTR_START) name = "%s_0x%x" % (idb_name.replace(".", "_"), fstart) out_path = os.path.join(out_dir, name) fname = idc.get_name(fstart) if not ida_gdl.gen_flow_graph( out_path, "%s (0x%x)" % (fname, fstart), idaapi.get_func(fstart), 0, 0, ida_gdl.CHART_GEN_DOT | ida_gdl.CHART_PRINT_NAMES, ): print "IDA error generating flow graph" # TODO add label to DOT file, see https://stackoverflow.com/a/6452088/10548020 # TODO highlight where rule matched # exit IDA idc.qexit(0) if __name__ == "__main__": main()