Trace32如何加载多段非连续地址mem文件匹配axf符号
Cortex-A7平台非连续内存转储加载与符号匹配方法
操作前提
调试环境为支持CMM脚本的Trace32调试器,使用*.axf格式符号文件,待加载的*.mem内存转储包含三段独立地址区间,分别为:
- 0x81600000 ~ 0x81700000(长度1MB/0x100000字节)
- 0x82600000 ~ 0x82700000(长度1MB/0x100000字节)
- 0x83600000 ~ 0x83700000(长度1MB/0x100000字节)
操作步骤
- 优先加载符号文件
首先加载axf文件的调试符号,注意不要加载axf自带的二进制段内容,避免覆盖后续导入的内存转储:Data.LOAD.Elf "你的axf文件完整路径.axf" /NoCODE /Noclear
参数说明:
/NoCODE表示仅加载符号表、行号等调试信息,不读取axf内的可执行二进制数据;/Noclear表示加载时不清空当前调试器的内存映射空间。
- 分段加载非连续mem文件
根据mem文件的存储形式,二选一操作即可:
方案1:mem文件为三段数据顺序拼接格式
如果你的mem文件是按「0x81600000段数据+0x82600000段数据+0x83600000段数据」的顺序连续拼接、无额外填充字节,直接通过文件偏移参数分段加载即可,不需要拆分文件:
; 加载第一段:从文件0偏移处读取1MB,映射到0x81600000 Data.LOAD.Binary "&mem_file_path" 0x81600000 /noclear /ByteOffset=0x0 /Len=0x100000 ; 加载第二段:跳过文件前1MB,读取1MB映射到0x82600000 Data.LOAD.Binary "&mem_file_path" 0x82600000 /noclear /ByteOffset=0x100000 /Len=0x100000 ; 加载第三段:跳过文件前2MB,读取1MB映射到0x83600000 Data.LOAD.Binary "&mem_file_path" 0x83600000 /noclear /ByteOffset=0x200000 /Len=0x100000
参数说明:
/ByteOffset指定从mem文件的第几个字节开始读取数据,/Len指定本次加载读取的总字节数。
方案2:mem文件段顺序不确定
如果不确定mem文件内的段排列顺序,直接将原mem文件按三个地址区间拆分为三个独立的二进制文件,每个文件仅存储对应一段的连续数据,再分别加载:
Data.LOAD.Binary "拆分后第一段文件路径.bin" 0x81600000 /noclear Data.LOAD.Binary "拆分后第二段文件路径.bin" 0x82600000 /noclear Data.LOAD.Binary "拆分后第三段文件路径.bin" 0x83600000 /noclear
结果验证
加载完成后执行Data.List 0x81600000、Data.dump 0x82600000等命令查看对应地址的反汇编、内存数据,如果能正常显示axf文件中对应的函数名、变量名,说明符号匹配成功。
内容的提问来源于stack exchange,提问作者hsz
相关产品推荐
相关产品推荐

