SaveDolphinMap.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. # Copyright 2021 Dolphin Emulator Project
  2. # Licensed under GPLv2+
  3. # Refer to the LICENSES/GPL-2.0-or-later.txt file included.
  4. from collections import namedtuple
  5. DolphinSymbol = namedtuple("DolphinSymbol", [
  6. "section", "addr", "size", "vaddr", "align", "name"
  7. ])
  8. def save_dolphin_map(filepath, text_map, data_map):
  9. line = "{0.addr:08x} {0.size:08x} {0.vaddr:08x} {0.align} {0.name}\n"
  10. with open(filepath, "w") as f:
  11. f.write(".text section layout\n")
  12. for symbol in text_map:
  13. f.write(line.format(symbol))
  14. f.write("\n.data section layout\n")
  15. for symbol in data_map:
  16. f.write(line.format(symbol))
  17. def ida_main():
  18. import idaapi
  19. import idautils
  20. import idc
  21. filepath = ida_kernwin.ask_file(1, "*.map", "Save a Dolphin emulator symbol map")
  22. if filepath is None:
  23. return
  24. text_map = []
  25. data_map = []
  26. for ea, name in idautils.Names():
  27. f = idaapi.get_func(ea)
  28. if f is not None:
  29. text_map.append(
  30. DolphinSymbol(".text", ea, f.size(), ea, 0, name)
  31. )
  32. else:
  33. data_map.append(
  34. DolphinSymbol(".data", ea, idc.get_item_size(ea), ea, 0, name)
  35. )
  36. save_dolphin_map(filepath, text_map, data_map)
  37. if __name__ == "__main__":
  38. ida_main()