/* ReadDolphinMap.idc Loads Dolphin .map files into IDA Pro. Carl Kenner, 2014 */ #include static main(void) { auto fh; auto fname; auto pusha, popa; auto start, end; auto success; auto count; auto line; auto ea; // column 1 auto name; // column 30 auto p; auto code; fname = AskFile(0,"*.map","Load a .map file from Dolphin emulator..."); fh = fopen(fname, "r"); if (fh == 0) { Message("Can't open %s\n", fname); return; } Message("Loading %s dolphin map file:\n", fname); for (count = 0; 1; count++) { line = readstr(fh); if (line == -1) break; if (strlen(line)>30 && line[0]!=" ") { ea = xtol(substr(line,0,8)); name = substr(line,29,strlen(line)-1); if (substr(name,0,3)!="zz_") { if (!MakeNameEx(ea,name,SN_NOCHECK | SN_PUBLIC | SN_NON_AUTO |SN_NOWARN)) { MakeNameEx(ea,name+"_2",SN_NOCHECK | SN_PUBLIC | SN_NON_AUTO ); } Message("ea='%x', name='%s'\n", ea, name); } else { MakeNameEx(ea,name,SN_NOCHECK | SN_PUBLIC | SN_AUTO | SN_WEAK | SN_NOWARN); } } else if (strlen(line)>30) { ea = xtol(substr(line,18,18+8)); p = strstr(line, " \t"); if (p>=30 && ea!=0) { name = substr(line,30,p); code = substr(line,p+2,strlen(line)); SetFunctionCmt(ea, code, 0); if (!MakeNameEx(ea,name,SN_NOCHECK | SN_PUBLIC | SN_NON_AUTO |SN_NOWARN)) { MakeNameEx(ea,name+"_2",SN_NOCHECK | SN_PUBLIC | SN_NON_AUTO ); } } } } Message("Dolphin map file done.\n"); }