ARM相關檔案解析

2021-10-13 07:39:44 字數 4223 閱讀 1949

在keil_v5\arm\armclang\sw\hlp    --》  中由help文件

arm_instruction_set_reference_guide.pdf    --》  arm指令集

compiler_reference_guide.pdf     --》  c7.2 syntax of a scatter file

compiler_user_guide.pdf

errors_and_warnings_reference_guide.pdf

instruction_set_assembly_guide_for_armv7_and_earlier_arm_architectures.pdf

libraries_user_guide.pdf

migration_and_compatibility_guide.pdf

/* include memory map */      --》  可以包含其他.ld

output_format("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")   --》 確定大小端

entry(_vector_start);   --》 啟動

section cross references      --》  可用於檢視每個.c引用的其他.c的函式

removing unused input sections from the image.    --》 

adding veneers to the image

image symbol table

memory map of the image

image component sizes

通過beyond compare檔案,可以比較修改前與修改後的.map檔案差異,如下

code (inc. data)   ro data    rw data    zi data      debug   

72068      15504       6244       1320      39704     879702   grand totals

72068      15504       6244        656      39704     879702   elf image totals (compressed)

72068      15504       6244        656          0          0   rom totals

case1: 在乙個.c中加入一句printf("\r\n");後map檔案會差別較大,對於一些mcu,可能導致無法開機啟動

可以看到加了1句printf,導致code端增加很多內容

code (inc. data)   ro data    rw data    zi data      debug   library member name

28          6          0          0          0         84   __2printf.o

40          6          0          0          0         72   _printf_char_file.o

12          0          0          0          0         68   defsig_exit.o

52          0          0          0          0         72   defsig_general.o

80         58          0          0          0         68   defsig_rtmem_inner.o

12          0          0          0          0         68   defsig_rtmem_outer.o

52         38          0          0          0         68   defsig_rtred_inner.o

12          0          0          0          0         68   defsig_rtred_outer.o

case2: sprintf使用不當,可能導致開機undefined_exception,可以從map檔案中檢視處理

case3:對於出現陣列越界的問題,列印出陣列越界位址,從map檔案中看越界的位置

.text  引用 .text,函式的直接呼叫

(.constdata) refers to oads.o(.text), 函式指標的賦值使用

(.text) refers to (.constdata) for __func__, 函式中通過函式指標呼叫函式

scatter/steering/symdefs file

compiler_reference_guide.pdf中的  c5.5.4 symdefs file format

type flag

x    --》  a64 code (aarch64 only)

a   --》 a32 code (aarch32 only)

t   --》  t32 code (aarch32 only)

d   --》  data

n   --》 number.

example

this example shows a typical symdefs file format:

## arm linker, 6030169: last updated: date

;value type name, this is an added comment

0x00008000 a __main

0x00008004 a __scatterload

0x000080e0 t main

0x0000814d t _main_arg

0x0000814d t __ar**_alloc

0x00008199 t __rt_get_ar**

…# this is also a comment, blank lines are ignored

…0x0000a4fc d __stdin

0x0000a540 d __stdout

0x0000a584 d __stderr

0xfffffffd n __sig_ign

形如sections 0x1e200 align 32

ram_data {}

ram_bss {}

table a2-1 aarch32 processor modes

processor mode

mode number

user

0b10000

fiq0b10001

irq0b10010

supervisor

0b10011

monitor

0b10110

abort

0b10111

hyp0b11010

undefined

0b11011

system

0b11111

暫存器table a2-2 predeclared core registers in aarch32 state

register names

meaning

r0-r15 and r0-r15

general purpose registers.

a1-a4

argument, result or scratch registers. these are synonyms for r0 to r3.

v1-v8

variable registers. these are synonyms for r4 to r11.

sbstatic base register. this is a synonym for r9.

ipintra-procedure call scratch register. this is a synonym for r12.

spstack pointer. this is a synonym for r13.

lrlink register. this is a synonym for r14.

pcprogram counter. this is a synonym for r15.

啟動boot

啟動向量表

ARM啟動解析

參考文章 起始位址 在分析啟動流程之前我們首先要清楚不論是arm的何種處理器,其都是從0x0000 0000位址處開始執行程式的。以2440為例 1.啟動方式 s3c2440支援兩種啟動模式 nand和非nand 這裡是nor flash 具體採用的方式取決於om0 om1兩個引腳的狀態。需要檢測硬...

arm彙編相關

cmp rn rm operand tst logical and ldr用法 摘自arm嵌入式系統開發一書 資料 基址暫存器 示例 mem base offset 基址暫存器加上偏移 ldr r0,r1,offset mem base offset 不變 ldr r0,r1,offset mem ...

ARM相關軟體介紹

分為ads和axd arm extended debugger ads負責編譯 鏈結,axd負責除錯。ads主要有以下幾項功能 提供彙編器和編譯器,彙編和編譯arm組合語言檔案 標準c c 語言檔案。內含鏈結器,進行目標檔案鏈結,生成乙個用於除錯的映象檔案。含有標準c c 庫檔案,支援使用者程式。a...