#include static first_func() { auto seed, ea; seed = get_func_attr(0x180001000, FUNCATTR_START); if (seed == BADADDR) { ea = get_first_seg(); while (ea != BADADDR) { if (get_segm_name(ea) == ".text" || get_segm_name(ea) == "CODE" || get_segm_name(ea) == "text" || get_segm_name(ea) == ".plt") break; ea = get_next_seg(ea); } if (ea != BADADDR) seed = ea; } if (seed == BADADDR) seed = get_func_attr(get_imagebase() + 0x1000, FUNCATTR_START); if (seed == BADADDR) { warning("cannot find seed function"); return BADADDR; } ea = get_prev_func(seed); while (ea != BADADDR) { seed = ea; ea = get_prev_func(seed); } return seed; } static dump_func_disasm(f, from, to) { auto ea; ea = from; while (ea != BADADDR && ea < to) { fprintf(f, "%08X: %s\n", ea, generate_disasm_line(ea, 0)); ea = next_head(ea, to); } fprintf(f, "\n"); } static main() { auto f, of, ea, n, end; f = fopen("C:\\Project\\MAG160C\\analysis\\ida\\export\\all_functions_disasm.txt", "w"); if (f == 0) { warning("cannot open output"); return; } of = fopen("C:\\Project\\MAG160C\\analysis\\ida\\export\\all_functions.txt", "w"); if (of == 0) { warning("cannot open map output"); fclose(f); return; } ea = first_func(); if (ea == BADADDR) { fclose(f); fclose(of); return; } n = 0; while (ea != BADADDR) { end = get_func_attr(ea, FUNCATTR_END); fprintf(f, "### FUNC %08X - %08X (%d bytes) name=%s\n", ea, end, end - ea, get_func_name(ea)); dump_func_disasm(f, ea, end); fprintf(of, "%08X %08X %s\n", ea, end, get_func_name(ea)); ea = get_next_func(ea); n = n + 1; } fprintf(of, "TOTAL %d\n", n); fclose(f); fclose(of); msg("all export done: %d funcs\n", n); }