import re from pathlib import Path def parse_map_file(map_file_path): # 定义正则表达式模式 section_pattern = re.compile(r'^\s*(\w+)\s+([0-9a-fA-F]+)\s+([0-9a-fA-F]+)\s+([0-9a-fA-F]+)\s+([0-9a-fA-F]+)\s+([0-9a-fA-F]+)\s+([0-9a-fA-F]+)\s+(.*)$') symbol_pattern = re.compile(r'^\s*([0-9a-fA-F]+)\s+([0-9a-fA-F]+)\s+([0-9a-fA-F]+)\s+(\w+)\s+(.*)$') sections = {} symbols = {} with open(map_file_path, 'r') as file: for line in file: # 匹配section行 match = section_pattern.match(line) if match: section_name = match.group(1) start_address = int(match.group(2), 16) end_address = int(match.group(3), 16) size = int(match.group(4), 16) sections[section_name] = { 'start_address': start_address, 'end_address': end_address, 'size': size } continue # 匹配symbol行 match = symbol_pattern.match(line) if match: address = int(match.group(1), 16) size = int(match.group(2), 16) type_ = match.group(3) name = match.group(4) definition = match.group(5) symbols[name] = { 'address': address, 'size': size, 'type': type_, 'definition': definition } return sections, symbols # 使用示例 map_file_path = 'D:\WorkingProject\LightStackOptimizer\software\lamina_controller_dsp\lamina_controller_dsp\DEBUG\lamina_controller_dsp.map' path_map = Path(map_file_path) sections, symbols = parse_map_file(map_file_path) print("Sections:") for section_name, section_info in sections.items(): print(f"Section: {section_name}") print(f" Start Address: {section_info['start_address']:X}") print(f" End Address: {section_info['end_address']:X}") print(f" Size: {section_info['size']:X}") print() print("Symbols:") for symbol_name, symbol_info in symbols.items(): print(f"Symbol: {symbol_name}") print(f" Address: {symbol_info['address']:X}") print(f" Size: {symbol_info['size']:X}") print(f" Type: {symbol_info['type']}") print(f" Definition: {symbol_info['definition']}") print()