ReadDolphinMap.idc 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /* ReadDolphinMap.idc
  2. Loads Dolphin .map files into IDA Pro.
  3. Carl Kenner, 2014
  4. */
  5. #include <idc.idc>
  6. static main(void)
  7. {
  8. auto fh;
  9. auto fname;
  10. auto pusha, popa;
  11. auto start, end;
  12. auto success;
  13. auto count;
  14. auto line;
  15. auto ea; // column 1
  16. auto name; // column 30
  17. auto p;
  18. auto code;
  19. fname = AskFile(0,"*.map","Load a .map file from Dolphin emulator...");
  20. fh = fopen(fname, "r");
  21. if (fh == 0) {
  22. Message("Can't open %s\n", fname);
  23. return;
  24. }
  25. Message("Loading %s dolphin map file:\n", fname);
  26. for (count = 0; 1; count++) {
  27. line = readstr(fh);
  28. if (line == -1)
  29. break;
  30. if (strlen(line)>30 && line[0]!=" ") {
  31. ea = xtol(substr(line,0,8));
  32. name = substr(line,29,strlen(line)-1);
  33. if (substr(name,0,3)!="zz_") {
  34. if (!MakeNameEx(ea,name,SN_NOCHECK | SN_PUBLIC | SN_NON_AUTO |SN_NOWARN)) {
  35. MakeNameEx(ea,name+"_2",SN_NOCHECK | SN_PUBLIC | SN_NON_AUTO );
  36. }
  37. Message("ea='%x', name='%s'\n", ea, name);
  38. } else {
  39. MakeNameEx(ea,name,SN_NOCHECK | SN_PUBLIC | SN_AUTO | SN_WEAK | SN_NOWARN);
  40. }
  41. } else if (strlen(line)>30) {
  42. ea = xtol(substr(line,18,18+8));
  43. p = strstr(line, " \t");
  44. if (p>=30 && ea!=0) {
  45. name = substr(line,30,p);
  46. code = substr(line,p+2,strlen(line));
  47. SetFunctionCmt(ea, code, 0);
  48. if (!MakeNameEx(ea,name,SN_NOCHECK | SN_PUBLIC | SN_NON_AUTO |SN_NOWARN)) {
  49. MakeNameEx(ea,name+"_2",SN_NOCHECK | SN_PUBLIC | SN_NON_AUTO );
  50. }
  51. }
  52. }
  53. }
  54. Message("Dolphin map file done.\n");
  55. }