#include static dump_range(out, from, to) { auto ea; ea = from; while (ea != BADADDR && ea < to) { fprintf(out, "%08X: %s\n", ea, generate_disasm_line(ea, 0)); ea = next_head(ea, to); } } static dump_xrefs(out, ea) { auto x, caller, from_ea, to_ea; from_ea = ea - 0x80; to_ea = ea + 0x80; x = get_first_dref_to(ea); if (x != BADADDR) { fprintf(out, " data refs from:\n"); while (x != BADADDR) { fprintf(out, " %08X\n", x); x = get_next_dref_to(ea, x); } } x = get_first_cref_to(ea); if (x != BADADDR) { fprintf(out, " code refs from:\n"); while (x != BADADDR) { fprintf(out, " %08X (func %08X)\n", x, get_func_attr(x, FUNCATTR_START)); x = get_next_cref_to(ea, x); } } } static dump_fn(out, ea, decomp) { auto f, end, s, i, name; f = get_func(ea); if (f == 0) { fprintf(out, "### %08X NOT A FUNCTION (dumping 0x200 bytes)\n", ea); dump_range(out, ea, ea + 0x200); fprintf(out, "\n==================================================================\n\n"); return; } end = get_func_attr(f, FUNCATTR_END); name = get_func_name(ea); fprintf(out, "### FUNC %08X - %08X (%d bytes) name=%s\n", ea, end, end - ea, name); dump_range(out, ea, end); fprintf(out, "\n"); dump_xrefs(out, ea); if (decomp) { s = decompile(ea); if (s != 0) { fprintf(out, "\n;; DECOMPILED:\n%s\n", s); } else { fprintf(out, "\n;; DECOMPILE FAILED\n"); } } fprintf(out, "\n==================================================================\n\n"); } static main() { auto dir, out, f, i, ea; dir = "C:\\Project\\MAG160C\\analysis\\ida\\export\\"; f = fopen(dir + "coresdk_keyfuncs.txt", "w"); if (f == 0) { warning("cannot open output file"); return; } dump_fn(f, 0x180017200, 1); // NUC lookup dump_fn(f, 0x180017330, 1); // blind pixel compensation dump_fn(f, 0x180016ae0, 1); // sensor temp endpoint selection dump_fn(f, 0x180016dd0, 1); // threshold Q12 interp dump_fn(f, 0x180016f10, 1); // gain/off Q12 interp dump_fn(f, 0x18000c760, 1); // table rebuild chunked write dump_fn(f, 0x18000c620, 1); // ref push / smoother feed dump_fn(f, 0x1800011a0, 1); // generic smoother dump_fn(f, 0x18001e920, 1); // temporal filter dump_fn(f, 0x18000a1d2, 1); // FFC trigger A dump_fn(f, 0x180002f50, 1); // FFC trigger B dump_fn(f, 0x180010780, 1); // temperature fclose(f); out = fopen(dir + "all_functions.txt", "w"); if (out != 0) { ea = get_first_func(); while (ea != BADADDR) { fprintf(out, "%08X %08X %s\n", ea, get_func_attr(ea, FUNCATTR_END), get_func_name(ea)); ea = get_next_func(ea); } fclose(out); } msg("export done\n"); }