单片机list文件解析
单片机list文件解析.
单片机开发中 lst 文件 在调试中有很高的参考价值, 从list文件总基本可用看出所有的目标文件信息. 看出我们汇编文件在内存中的分布及执行过程. 进而发现一些隐藏的BUG.
st 文件实际是使用 objdump 反汇编 elf 文件得到的输出文件,它拥有比 map 文件更详细的信息。如果你的程序中加入了调试信息,那么你可以在 lst 中看到每一条指令的地址。借助 lst 文件,同时通过查看栈帧结构(可以通过查看相应的手册来确定栈帧的组成),通过在 lst 文件中查找 lr 的地址所在的位置,你就能立刻定位到问题。
以CH582 的工程配置为例, 项目->属性->C/C++构建->设置->工具设置->GNU RISC-V Create Flash Image->General,你可以在这个选项中指定更详细的信息。
文件总含有丰富的信息. listing file中出现的先后顺序加以说明:
1.页头段(Page Header)
每个lst文件都有一个包含了编译器版本号、源文件名称、日期、时间、页号的头部。
示例:
EC_BLE_SOC.elf: file format elf32-littleriscv
architecture: riscv:rv32, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x00000000
还包含内部所有代码块的, 头地址.
Program Header:
LOAD off 0x00001000 vaddr 0x00000000 paddr 0x00000000 align 2**12
filesz 0x00000004 memsz 0x00000004 flags r-x
LOAD off 0x00002000 vaddr 0x20000000 paddr 0x00000004 align 2**12
filesz 0x0000287c memsz 0x0000287c flags r-x
LOAD off 0x00004880 vaddr 0x00002880 paddr 0x00002880 align 2**12
filesz 0x000291bc memsz 0x000291bc flags r-x
LOAD off 0x0002e87c vaddr 0x2000287c paddr 0x0002ba3c align 2**12
filesz 0x000005ac memsz 0x00002f20 flags rw-
符号列表段(Sections table)
符号表段含有,所有符号的入口地址及大小,符号列表段包含了源程序文件中定义的变量信息,比如变量名称、类别(SFR、structure、typedef、static、public、auto、extern)、存储空间、数据类型、偏移量、占用 字节数等。SYMBOLS 指令控制LST文件产生符号列表段。
所有变量及函数的入口都在这里
示例1.段类型
Sections:
Idx Name Size VMA LMA File off Algn Flags
0 .init 00000004 00000000 00000000 00001000 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .highcodelalign 00000000 00000004 00000004 0002ee28 2**0 CONTENTS
2 .highcode 0000287c 20000000 00000004 00002000 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE
3 .text 000291bc 00002880 00002880 00004880 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE
4 .fini 00000000 0002ba3c 0002ba3c 0002ee28 2**0 CONTENTS, ALLOC, LOAD, CODE
5 .dalign 00000000 2000287c 2000287c 0002ee28 2**0 CONTENTS
6 .dlalign 00000000 0002ba3c 0002ba3c 0002ee28 2**0 CONTENTS
7 .data 000005ac 2000287c 0002ba3c 0002e87c 2**2 CONTENTS, ALLOC, LOAD, DATA
8 .bss 00002974 20002e28 0002bfe8 0002ee28 2**3 ALLOC
9 .stack 00000000 20008000 20008000 0002ee28 2**0 CONTENTS
10 .debug_info 000399df 00000000 00000000 0002ee28 2**0 CONTENTS, READONLY, DEBUGGING
11 .debug_abbrev 00006f9c 00000000 00000000 00068807 2**0 CONTENTS, READONLY, DEBUGGING
12 .debug_loc 0000a5a1 00000000 00000000 0006f7a3 2**0 CONTENTS, READONLY, DEBUGGING
13 .debug_aranges 00000b40 00000000 00000000 00079d48 2**3 CONTENTS, READONLY, DEBUGGING
14 .debug_ranges 00001f40 00000000 00000000 0007a888 2**3 CONTENTS, READONLY, DEBUGGING
15 .debug_line 0001c557 00000000 00000000 0007c7c8 2**0 CONTENTS, READONLY, DEBUGGING
16 .debug_str 00006518 00000000 00000000 00098d1f 2**0 CONTENTS, READONLY