# -*- coding: gbk -*- import argparse from pathlib import Path def find_mapfile(path): path = Path(path) map_file = None if path.is_dir(): map_file = next(path.rglob("*.map"), None) else : pass return map_file def parse_mapfile_find_symbols(map_file, target_symbols): with open(map_file, "r", encoding="utf-8", errors="ignore") as f: for line in f: parts = line.strip().split() if len(parts) < 2: continue symbol, address = parts[0], parts[1] if symbol in target_symbols and address.startswith("0x"): target_symbols[symbol] = address return target_symbols if __name__ == "__main__": import sys path = sys.argv[1] target_symbols = { "Load$$DATA$$RW$$Base": None, "Image$$DATA$$RW$$Base": None, "Image$$DATA$$RW$$Length": None } mapfile = find_mapfile(path) target_symbols = parse_mapfile_find_symbols(mapfile, target_symbols) rw_data_load_addr = target_symbols["Load$$DATA$$RW$$Base"] rw_date_exec_addr = target_symbols["Image$$DATA$$RW$$Base"] rw_data_length = target_symbols["Image$$DATA$$RW$$Length"] rw_data_load_addr = int(rw_data_load_addr, 16) rw_date_exec_addr = int(rw_date_exec_addr, 16) rw_data_length = int(rw_data_length, 16) rw_data_load_end = rw_data_load_addr + rw_data_length print(f"rw_data_load_addr = {rw_data_load_addr:x}") print(f"rw_date_exec_addr = {rw_date_exec_addr:x}") print(f"rw_data_length = {rw_data_length:x}") if rw_date_exec_addr < rw_data_load_end : print("****************************************************************") print(f"error: rw_date执行地址与加载重叠,请往后移至少到 {rw_data_load_end:x}!!!") print(f"error: rw_date执行地址与加载重叠,请往后移至少到 {rw_data_load_end:x}!!!") print(f"error: rw_date执行地址与加载重叠,请往后移至少到 {rw_data_load_end:x}!!!") print("****************************************************************") exit(1) exit(0)