59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
# -*- 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)
|