MDK main()函数执行前汇编代码分析

来源:互联网 发布:ios内购 元数据丢失 编辑:程序博客网 时间:2024/06/14 22:19


参考资料:MDK main函数运行前的分析

========================================================================

** ELF Header Information

    File Name: .\Objects\test.axf

    Machine class: ELFCLASS32 (32-bit)
    Data encoding: ELFDATA2LSB (Little endian)
    Header version: EV_CURRENT (Current version)
    Operating System ABI: none
    ABI Version: 0
    File Type: ET_EXEC (Executable) (2)
    Machine: EM_ARM (ARM)

    Image Entry point: 0x080000ed
    Flags: EF_ARM_HASENTRY (0x05000002)

    ARM ELF revision: 5 (ABI version 2)

    Built with
    Component: ARM Compiler 5.05 (build 41) Tool: armasm [4d0eb9]
    Component: ARM Compiler 5.05 (build 41) Tool: armlink [4d0eb9]

    Header size: 52 bytes (0x34)
    Program header entry size: 32 bytes (0x20)
    Section header entry size: 40 bytes (0x28)

    Program header entries: 1
    Section header entries: 16

    Program header offset: 25208 (0x00006278)
    Section header offset: 25240 (0x00006298)

    Section header string table index: 15

========================================================================

** Program header #0 (PT_LOAD) [PF_X + PF_W + PF_R + PF_ARM_ENTRY]
    Size : 3364 bytes (1728 bytes in file)
    Virtual address: 0x08000000 (Alignment 8)


========================================================================

** Section #1 'ER_IROM1' (SHT_PROGBITS) [SHF_ALLOC + SHF_EXECINSTR]
    Size   : 1708 bytes (alignment 4)
    Address: 0x08000000

    $d.realdata
    RESET
    __Vectors
        0x08000000:    20000678    x..     DCD    536872568
        0x08000004:    08000191    ....    DCD    134218129
        0x08000008:    080001f3    ....    DCD    134218227
        0x0800000c:    080001f5    ....    DCD    134218229
        0x08000010:    080001f9    ....    DCD    134218233
        0x08000014:    080001fd    ....    DCD    134218237
        0x08000018:    08000201    ....    DCD    134218241
        0x0800001c:    00000000    ....    DCD    0
        0x08000020:    00000000    ....    DCD    0
        0x08000024:    00000000    ....    DCD    0
        0x08000028:    00000000    ....    DCD    0
        0x0800002c:    08000205    ....    DCD    134218245
        0x08000030:    08000207    ....    DCD    134218247
        0x08000034:    00000000    ....    DCD    0
        0x08000038:    08000209    ....    DCD    134218249
        0x0800003c:    0800020b    ....    DCD    134218251
        0x08000040:    080001ab    ....    DCD    134218155                            ;外部异常使用同一入口地址
        0x08000044:    080001ab    ....    DCD    134218155
        0x08000048:    080001ab    ....    DCD    134218155
        0x0800004c:    080001ab    ....    DCD    134218155
        0x08000050:    080001ab    ....    DCD    134218155
        0x08000054:    080001ab    ....    DCD    134218155
        0x08000058:    080001ab    ....    DCD    134218155
        0x0800005c:    080001ab    ....    DCD    134218155
        0x08000060:    080001ab    ....    DCD    134218155
        0x08000064:    080001ab    ....    DCD    134218155
        0x08000068:    080001ab    ....    DCD    134218155
        0x0800006c:    080001ab    ....    DCD    134218155
        0x08000070:    080001ab    ....    DCD    134218155
        0x08000074:    080001ab    ....    DCD    134218155
        0x08000078:    080001ab    ....    DCD    134218155
        0x0800007c:    080001ab    ....    DCD    134218155
        0x08000080:    080001ab    ....    DCD    134218155
        0x08000084:    080001ab    ....    DCD    134218155
        0x08000088:    080001ab    ....    DCD    134218155
        0x0800008c:    080001ab    ....    DCD    134218155
        0x08000090:    080001ab    ....    DCD    134218155
        0x08000094:    080001ab    ....    DCD    134218155
        0x08000098:    080001ab    ....    DCD    134218155
        0x0800009c:    080001ab    ....    DCD    134218155
        0x080000a0:    080001ab    ....    DCD    134218155
        0x080000a4:    080001ab    ....    DCD    134218155
        0x080000a8:    080001ab    ....    DCD    134218155
        0x080000ac:    080001ab    ....    DCD    134218155
        0x080000b0:    080001ab    ....    DCD    134218155
        0x080000b4:    080001ab    ....    DCD    134218155
        0x080000b8:    080001ab    ....    DCD    134218155
        0x080000bc:    080001ab    ....    DCD    134218155
        0x080000c0:    080001ab    ....    DCD    134218155
        0x080000c4:    080001ab    ....    DCD    134218155
        0x080000c8:    080001ab    ....    DCD    134218155
        0x080000cc:    080001ab    ....    DCD    134218155
        0x080000d0:    080001ab    ....    DCD    134218155
        0x080000d4:    080001ab    ....    DCD    134218155
        0x080000d8:    080001ab    ....    DCD    134218155
        0x080000dc:    080001ab    ....    DCD    134218155
        0x080000e0:    080001ab    ....    DCD    134218155
        0x080000e4:    080001ab    ....    DCD    134218155
        0x080000e8:    080001ab    ....    DCD    134218155
    $t
    !!!main
    __Vectors_End
    __main
        0x080000ec:    f000f802    ....    BL       __scatterload ; 0x80000f4
        0x080000f0:    f000f83e    ..>.    BL       __rt_entry ; 0x8000170            ; __re_entry中调用main()函数
    !!!scatter
    __scatterload
    __scatterload_rt2
    __scatterload_rt2_thumb_only
        0x080000f4:    a00a        ..      ADR      r0,{pc}+0x2c                     ; 0x8000120 r0 = 0x8000120
        0x080000f6:    e8900c00    ....    LDM      r0,{r10,r11}                     ; r10 = 0x56c, r11 = 0x58c
        0x080000fa:    4482        .D      ADD      r10,r10,r0                       ; r10 = 0x800068C
        0x080000fc:    4483        .D      ADD      r11,r11,r0                       ; r11 = 0x80006AC
        0x080000fe:    f1aa0701    ....    SUB      r7,r10,#1                        ; r7  = 0x800068B
    __scatterload_null
        0x08000102:    45da        .E      CMP      r10,r11
        0x08000104:    d101        ..      BNE      0x800010a                         ; __scatterload_null + 8
        0x08000106:    f000f833    ..3.    BL       __rt_entry                         ; 0x8000170
        0x0800010a:    f2af0e09    ....    ADR      lr,{pc}-7                         ; lr = 0x8000103
        0x0800010e:    e8ba000f    ....    LDM      r10!,{r0-r3}                    ; 第一次(r0 = 0x080006ac, r1 = 0x20000000, r2 = 0x00000014, r3 = 0x08000128, r10 = 0x800069C)
                                                                                    ; 第二次(r0 = 0x080006c0, r1 = 0x20000014, r2 = 0x00000664, r3 = 0x08000144, r10 = 0x80006AC)
        0x08000112:    f0130f01    ....    TST      r3,#1
        0x08000116:    bf18        ..      IT       NE                                  ; 如果不相等执行SBUNE  Z clear
        0x08000118:    1afb        ..      SUBNE    r3,r7,r3
        0x0800011a:    f0430301    C...    ORR      r3,r3,#1
        0x0800011e:    4718        .G      BX       r3
    $d
        0x08000120:    0000056c    l...    DCD    1388                                ; ????
        0x08000124:    0000058c    ....    DCD    1420
    $t
    !!handler_copy
    __scatterload_copy
        0x08000128:    3a10        .:      SUBS     r2,r2,#0x10                        ; r2 = 0x00000014 RW data大小
        0x0800012a:    bf24        $.      ITT      CS                                   ; 如果C位为1(判断r2中的值是否是正数)执行4字节复制,IT指令及CS 参考《ARM Development Tools》
        0x0800012c:    c878        x.      LDMCS    r0!,{r3-r6}                        ; r0 = 0x080006ac 代码之后的flash中存放rw数据 将RW data复制到内存
        0x0800012e:    c178        x.      STMCS    r1!,{r3-r6}
        0x08000130:    d8fa        ..      BHI      __scatterload_copy                 ; 0x8000128
        0x08000132:    0752        R.      LSLS     r2,r2,#29                           ; 左移29位根据C位判断剩下的字节数是8还是4
        0x08000134:    bf24        $.      ITT      CS                                   ; C set    C 1 r2 0000 0000 0000 0000 0000 0000 0000 0000
        0x08000136:    c830        0.      LDMCS    r0!,{r4,r5}
        0x08000138:    c130        0.      STMCS    r1!,{r4,r5}
        0x0800013a:    bf44        D.      ITT      MI                                   ; N set    C 0 r2 1000 0000 0000 0000 0000 0000 0000 0000
        0x0800013c:    6804        .h      LDRMI    r4,[r0,#0]
        0x0800013e:    600c        .`      STRMI    r4,[r1,#0]
        0x08000140:    4770        pG      BX       lr
        0x08000142:    0000        ..      MOVS     r0,r0
    !!handler_zi
    __scatterload_zeroinit                                                            ; r1 = 0x20000000 + data段的大小   在接下来的内存中初始化.bss段
        0x08000144:    2300        .#      MOVS     r3,#0
        0x08000146:    2400        .$      MOVS     r4,#0
        0x08000148:    2500        .%      MOVS     r5,#0
        0x0800014a:    2600        .&      MOVS     r6,#0
        0x0800014c:    3a10        .:      SUBS     r2,r2,#0x10
        0x0800014e:    bf28        (.      IT       CS
        0x08000150:    c178        x.      STMCS    r1!,{r3-r6}
        0x08000152:    d8fb        ..      BHI      0x800014c                         ; __scatterload_zeroinit + 8
        0x08000154:    0752        R.      LSLS     r2,r2,#29
        0x08000156:    bf28        (.      IT       CS
        0x08000158:    c130        0.      STMCS    r1!,{r4,r5}
        0x0800015a:    bf48        H.      IT       MI
        0x0800015c:    600b        .`      STRMI    r3,[r1,#0]
        0x0800015e:    4770        pG      BX       lr
    .ARM.Collect$$libinit$$00000000
    __rt_lib_init
        0x08000160:    b51f        ..      PUSH     {r0-r4,lr}
    .ARM.Collect$$libinit$$00000002
    .ARM.Collect$$libinit$$00000004
    .ARM.Collect$$libinit$$00000005
    __rt_lib_init_fp_1
    __rt_lib_init_heap_2
    __rt_lib_init_preinit_1
        0x08000162:    e89d0003    ....    LDM      sp,{r0,r1}
        0x08000166:    f000f9b7    ....    BL       _init_alloc                     ; 0x80004d8
    .ARM.Collect$$libinit$$0000000A
    .ARM.Collect$$libinit$$0000000C
    .ARM.Collect$$libinit$$0000000E
    .ARM.Collect$$libinit$$00000011
    .ARM.Collect$$libinit$$00000013
    .ARM.Collect$$libinit$$00000015
    .ARM.Collect$$libinit$$00000017
    .ARM.Collect$$libinit$$00000019
    .ARM.Collect$$libinit$$0000001B
    .ARM.Collect$$libinit$$0000001D
    .ARM.Collect$$libinit$$0000001F
    .ARM.Collect$$libinit$$00000021
    .ARM.Collect$$libinit$$00000023
    .ARM.Collect$$libinit$$00000025
    .ARM.Collect$$libinit$$0000002C
    .ARM.Collect$$libinit$$0000002E
    .ARM.Collect$$libinit$$00000030
    .ARM.Collect$$libinit$$00000032
    .ARM.Collect$$libinit$$00000033
    __rt_lib_init_alloca_1
    __rt_lib_init_argv_1
    __rt_lib_init_atexit_1
    __rt_lib_init_clock_1
    __rt_lib_init_cpp_1
    __rt_lib_init_exceptions_1
    __rt_lib_init_fp_trap_1
    __rt_lib_init_getenv_1
    __rt_lib_init_heap_1
    __rt_lib_init_lc_collate_1
    __rt_lib_init_lc_ctype_1
    __rt_lib_init_lc_monetary_1
    __rt_lib_init_lc_numeric_1
    __rt_lib_init_lc_time_1
    __rt_lib_init_rand_1
    __rt_lib_init_return
    __rt_lib_init_signal_1
    __rt_lib_init_stdio_1
    __rt_lib_init_user_alloc_1
        0x0800016a:    bd1f        ..      POP      {r0-r4,pc}
    .ARM.Collect$$libshutdown$$00000000
    __rt_lib_shutdown
        0x0800016c:    b510        ..      PUSH     {r4,lr}
    .ARM.Collect$$libshutdown$$00000003
    .ARM.Collect$$libshutdown$$00000006
    .ARM.Collect$$libshutdown$$00000009
    .ARM.Collect$$libshutdown$$0000000B
    .ARM.Collect$$libshutdown$$0000000E
    .ARM.Collect$$libshutdown$$0000000F
    __rt_lib_shutdown_fp_trap_1
    __rt_lib_shutdown_heap_1
    __rt_lib_shutdown_return
    __rt_lib_shutdown_signal_1
    __rt_lib_shutdown_stdio_1
    __rt_lib_shutdown_user_alloc_1
        0x0800016e:    bd10        ..      POP      {r4,pc}
    .ARM.Collect$$rtentry$$00000000
    .ARM.Collect$$rtentry$$00000002
    .ARM.Collect$$rtentry$$00000004
    __rt_entry
    __rt_entry_presh_1
    __rt_entry_sh
        0x08000170:    f000fa0e    ....    BL       __semihosting_library_function     ; 0x8000590
        0x08000174:    4611        .F      MOV      r1,r2
    .ARM.Collect$$rtentry$$00000009
    .ARM.Collect$$rtentry$$0000000A
    __rt_entry_li
    __rt_entry_postsh_1
        0x08000176:    f7fffff3    ....    BL       __rt_lib_init                     ; 0x8000160
    .ARM.Collect$$rtentry$$0000000C
    .ARM.Collect$$rtentry$$0000000D
    __rt_entry_main
    __rt_entry_postli_1
        0x0800017a:    f000f829    ..).    BL       main                             ; 0x80001d0
        0x0800017e:    f000fa2c    ..,.    BL       exit                             ; 0x80005da
    .ARM.Collect$$rtexit$$00000000
    __rt_exit
        0x08000182:    b403        ..      PUSH     {r0,r1}
    .ARM.Collect$$rtexit$$00000002
    .ARM.Collect$$rtexit$$00000003
    __rt_exit_ls
    __rt_exit_prels_1
        0x08000184:    f7fffff2    ....    BL       __rt_lib_shutdown ; 0x800016c
    .ARM.Collect$$rtexit$$00000004
    __rt_exit_exit
        0x08000188:    bc03        ..      POP      {r0,r1}
        0x0800018a:    f000fa59    ..Y.    BL       _sys_exit ; 0x8000640
        0x0800018e:    0000        ..      MOVS     r0,r0
    .text
    .emb_text
    Reset_Handler
    _maybe_terminate_alloc
        0x08000190:    4809        .H      LDR      r0,[pc,#36] ; [0x80001b8] = 0x80002eb        r0 = 0x80002eb        调用SystemInit()
        0x08000192:    4780        .G      BLX      r0
        0x08000194:    4809        .H      LDR      r0,[pc,#36] ; [0x80001bc] = 0x80000ed        r0 = 0x80000ed        调用__main()
        0x08000196:    4700        .G      BX       r0
        0x08000198:    e7fe        ..      B        0x8000198 ; Reset_Handler + 8
        0x0800019a:    e7fe        ..      B        0x800019a ; Reset_Handler + 10
        0x0800019c:    e7fe        ..      B        0x800019c ; Reset_Handler + 12
        0x0800019e:    e7fe        ..      B        0x800019e ; Reset_Handler + 14
        0x080001a0:    e7fe        ..      B        0x80001a0 ; Reset_Handler + 16
        0x080001a2:    e7fe        ..      B        0x80001a2 ; Reset_Handler + 18
        0x080001a4:    e7fe        ..      B        0x80001a4 ; Reset_Handler + 20
        0x080001a6:    e7fe        ..      B        0x80001a6 ; Reset_Handler + 22
        0x080001a8:    e7fe        ..      B        0x80001a8 ; Reset_Handler + 24
    ADC1_2_IRQHandler
    CAN1_RX1_IRQHandler
    CAN1_SCE_IRQHandler
    DMA1_Channel1_IRQHandler
    DMA1_Channel2_IRQHandler
    DMA1_Channel3_IRQHandler
    DMA1_Channel4_IRQHandler
    DMA1_Channel5_IRQHandler
    DMA1_Channel6_IRQHandler
    DMA1_Channel7_IRQHandler
    EXTI0_IRQHandler
    EXTI15_10_IRQHandler
    EXTI1_IRQHandler
    EXTI2_IRQHandler
    EXTI3_IRQHandler
    EXTI4_IRQHandler
    EXTI9_5_IRQHandler
    FLASH_IRQHandler
    I2C1_ER_IRQHandler
    I2C1_EV_IRQHandler
    I2C2_ER_IRQHandler
    I2C2_EV_IRQHandler
    PVD_IRQHandler
    RCC_IRQHandler
    RTCAlarm_IRQHandler
    RTC_IRQHandler
    SPI1_IRQHandler
    SPI2_IRQHandler
    TAMPER_IRQHandler
    TIM1_BRK_IRQHandler
    TIM1_CC_IRQHandler
    TIM1_TRG_COM_IRQHandler
    TIM1_UP_IRQHandler
    TIM2_IRQHandler
    TIM3_IRQHandler
    TIM4_IRQHandler
    USART1_IRQHandler
    USART2_IRQHandler
    USART3_IRQHandler
    USBWakeUp_IRQHandler
    USB_HP_CAN1_TX_IRQHandler
    USB_LP_CAN1_RX0_IRQHandler
    WWDG_IRQHandler
        0x080001aa:    e7fe        ..      B        ADC1_2_IRQHandler ; 0x80001aa
    __user_initial_stackheap
        0x080001ac:    4804        .H      LDR      r0,[pc,#16] ; [0x80001c0] = 0x20000078
        0x080001ae:    4905        .I      LDR      r1,[pc,#20] ; [0x80001c4] = 0x20000678
        0x080001b0:    4a05        .J      LDR      r2,[pc,#20] ; [0x80001c8] = 0x20000278
        0x080001b2:    4b06        .K      LDR      r3,[pc,#24] ; [0x80001cc] = 0x20000278
        0x080001b4:    4770        pG      BX       lr
    $d
        0x080001b6:    0000        ..      DCW    0
        0x080001b8:    080002eb    ....    DCD    134218475
        0x080001bc:    080000ed    ....    DCD    134217965
        0x080001c0:    20000078    x..     DCD    536871032
        0x080001c4:    20000678    x..     DCD    536872568
        0x080001c8:    20000278    x..     DCD    536871544
        0x080001cc:    20000278    x..     DCD    536871544
    $t
    .text
    main
        0x080001d0:    2400        .$      MOVS     r4,#0
        0x080001d2:    2004        .       MOVS     r0,#4
        0x080001d4:    f000f90a    ....    BL       malloc ; 0x80003ec
        0x080001d8:    4604        .F      MOV      r4,r0
        0x080001da:    f04f4000    O..@    MOV      r0,#0x80000000
        0x080001de:    6020         `      STR      r0,[r4,#0]
        0x080001e0:    bf00        ..      NOP      
        0x080001e2:    4620         F      MOV      r0,r4
        0x080001e4:    f000f931    ..1.    BL       free ; 0x800044a
        0x080001e8:    bf00        ..      NOP      
        0x080001ea:    bf00        ..      NOP      
        0x080001ec:    e7fe        ..      B        0x80001ec ; main + 28
    assert_failed
        0x080001ee:    bf00        ..      NOP      
        0x080001f0:    e7fe        ..      B        0x80001f0 ; assert_failed + 2
    .text
    NMI_Handler
        0x080001f2:    4770        pG      BX       lr
    HardFault_Handler
        0x080001f4:    bf00        ..      NOP      
        0x080001f6:    e7fe        ..      B        0x80001f6 ; HardFault_Handler + 2
    MemManage_Handler
        0x080001f8:    bf00        ..      NOP      
        0x080001fa:    e7fe        ..      B        0x80001fa ; MemManage_Handler + 2
    BusFault_Handler
        0x080001fc:    bf00        ..      NOP      
        0x080001fe:    e7fe        ..      B        0x80001fe ; BusFault_Handler + 2
    UsageFault_Handler
        0x08000200:    bf00        ..      NOP      
        0x08000202:    e7fe        ..      B        0x8000202 ; UsageFault_Handler + 2
    SVC_Handler
        0x08000204:    4770        pG      BX       lr
    DebugMon_Handler
        0x08000206:    4770        pG      BX       lr
    PendSV_Handler
        0x08000208:    4770        pG      BX       lr
    SysTick_Handler
        0x0800020a:    4770        pG      BX       lr
    .text
    SetSysClockTo72
        0x0800020c:    b50c        ..      PUSH     {r2,r3,lr}
        0x0800020e:    2000        .       MOVS     r0,#0
        0x08000210:    9001        ..      STR      r0,[sp,#4]
        0x08000212:    9000        ..      STR      r0,[sp,#0]
        0x08000214:    486c        lH      LDR      r0,[pc,#432] ; [0x80003c8] = 0x40021000
        0x08000216:    6800        .h      LDR      r0,[r0,#0]
        0x08000218:    f4403080    @..0    ORR      r0,r0,#0x10000
        0x0800021c:    496a        jI      LDR      r1,[pc,#424] ; [0x80003c8] = 0x40021000
        0x0800021e:    6008        .`      STR      r0,[r1,#0]
        0x08000220:    bf00        ..      NOP      
        0x08000222:    4869        iH      LDR      r0,[pc,#420] ; [0x80003c8] = 0x40021000
        0x08000224:    6800        .h      LDR      r0,[r0,#0]
        0x08000226:    f4003000    ...0    AND      r0,r0,#0x20000
        0x0800022a:    9000        ..      STR      r0,[sp,#0]
        0x0800022c:    9801        ..      LDR      r0,[sp,#4]
        0x0800022e:    1c40        @.      ADDS     r0,r0,#1
        0x08000230:    9001        ..      STR      r0,[sp,#4]
        0x08000232:    9800        ..      LDR      r0,[sp,#0]
        0x08000234:    b918        ..      CBNZ     r0,0x800023e ; SetSysClockTo72 + 50
        0x08000236:    9801        ..      LDR      r0,[sp,#4]
        0x08000238:    f5b06fa0    ...o    CMP      r0,#0x500
        0x0800023c:    d1f1        ..      BNE      0x8000222 ; SetSysClockTo72 + 22
        0x0800023e:    4862        bH      LDR      r0,[pc,#392] ; [0x80003c8] = 0x40021000
        0x08000240:    6800        .h      LDR      r0,[r0,#0]
        0x08000242:    f4003000    ...0    AND      r0,r0,#0x20000
        0x08000246:    b110        ..      CBZ      r0,0x800024e ; SetSysClockTo72 + 66
        0x08000248:    2001        .       MOVS     r0,#1
        0x0800024a:    9000        ..      STR      r0,[sp,#0]
        0x0800024c:    e001        ..      B        0x8000252 ; SetSysClockTo72 + 70
        0x0800024e:    2000        .       MOVS     r0,#0
        0x08000250:    9000        ..      STR      r0,[sp,#0]
        0x08000252:    9800        ..      LDR      r0,[sp,#0]
        0x08000254:    2801        .(      CMP      r0,#1
        0x08000256:    d143        C.      BNE      0x80002e0 ; SetSysClockTo72 + 212
        0x08000258:    485c        \H      LDR      r0,[pc,#368] ; [0x80003cc] = 0x40022000
        0x0800025a:    6800        .h      LDR      r0,[r0,#0]
        0x0800025c:    f0400010    @...    ORR      r0,r0,#0x10
        0x08000260:    495a        ZI      LDR      r1,[pc,#360] ; [0x80003cc] = 0x40022000
        0x08000262:    6008        .`      STR      r0,[r1,#0]
        0x08000264:    4608        .F      MOV      r0,r1
        0x08000266:    6800        .h      LDR      r0,[r0,#0]
        0x08000268:    f0200003     ...    BIC      r0,r0,#3
        0x0800026c:    6008        .`      STR      r0,[r1,#0]
        0x0800026e:    4608        .F      MOV      r0,r1
        0x08000270:    6800        .h      LDR      r0,[r0,#0]
        0x08000272:    f0400002    @...    ORR      r0,r0,#2
        0x08000276:    6008        .`      STR      r0,[r1,#0]
        0x08000278:    4853        SH      LDR      r0,[pc,#332] ; [0x80003c8] = 0x40021000
        0x0800027a:    6840        @h      LDR      r0,[r0,#4]
        0x0800027c:    4952        RI      LDR      r1,[pc,#328] ; [0x80003c8] = 0x40021000
        0x0800027e:    6048        H`      STR      r0,[r1,#4]
        0x08000280:    4608        .F      MOV      r0,r1
        0x08000282:    6840        @h      LDR      r0,[r0,#4]
        0x08000284:    6048        H`      STR      r0,[r1,#4]
        0x08000286:    4608        .F      MOV      r0,r1
        0x08000288:    6840        @h      LDR      r0,[r0,#4]
        0x0800028a:    f4406080    @..`    ORR      r0,r0,#0x400
        0x0800028e:    6048        H`      STR      r0,[r1,#4]
        0x08000290:    4608        .F      MOV      r0,r1
        0x08000292:    6840        @h      LDR      r0,[r0,#4]
        0x08000294:    f420107c     .|.    BIC      r0,r0,#0x3f0000
        0x08000298:    6048        H`      STR      r0,[r1,#4]
        0x0800029a:    4608        .F      MOV      r0,r1
        0x0800029c:    6840        @h      LDR      r0,[r0,#4]
        0x0800029e:    f44010e8    @...    ORR      r0,r0,#0x1d0000
        0x080002a2:    6048        H`      STR      r0,[r1,#4]
        0x080002a4:    4608        .F      MOV      r0,r1
        0x080002a6:    6800        .h      LDR      r0,[r0,#0]
        0x080002a8:    f0407080    @..p    ORR      r0,r0,#0x1000000
        0x080002ac:    6008        .`      STR      r0,[r1,#0]
        0x080002ae:    bf00        ..      NOP      
        0x080002b0:    4845        EH      LDR      r0,[pc,#276] ; [0x80003c8] = 0x40021000
        0x080002b2:    6800        .h      LDR      r0,[r0,#0]
        0x080002b4:    f0007000    ...p    AND      r0,r0,#0x2000000
        0x080002b8:    2800        .(      CMP      r0,#0
        0x080002ba:    d0f9        ..      BEQ      0x80002b0 ; SetSysClockTo72 + 164
        0x080002bc:    4842        BH      LDR      r0,[pc,#264] ; [0x80003c8] = 0x40021000
        0x080002be:    6840        @h      LDR      r0,[r0,#4]
        0x080002c0:    f0200003     ...    BIC      r0,r0,#3
        0x080002c4:    4940        @I      LDR      r1,[pc,#256] ; [0x80003c8] = 0x40021000
        0x080002c6:    6048        H`      STR      r0,[r1,#4]
        0x080002c8:    4608        .F      MOV      r0,r1
        0x080002ca:    6840        @h      LDR      r0,[r0,#4]
        0x080002cc:    f0400002    @...    ORR      r0,r0,#2
        0x080002d0:    6048        H`      STR      r0,[r1,#4]
        0x080002d2:    bf00        ..      NOP      
        0x080002d4:    483c        <H      LDR      r0,[pc,#240] ; [0x80003c8] = 0x40021000
        0x080002d6:    6840        @h      LDR      r0,[r0,#4]
        0x080002d8:    f000000c    ....    AND      r0,r0,#0xc
        0x080002dc:    2808        .(      CMP      r0,#8
        0x080002de:    d1f9        ..      BNE      0x80002d4 ; SetSysClockTo72 + 200
        0x080002e0:    bd0c        ..      POP      {r2,r3,pc}
    SetSysClock
        0x080002e2:    b510        ..      PUSH     {r4,lr}
        0x080002e4:    f7ffff92    ....    BL       SetSysClockTo72 ; 0x800020c
        0x080002e8:    bd10        ..      POP      {r4,pc}
    SystemInit
        0x080002ea:    b510        ..      PUSH     {r4,lr}
        0x080002ec:    4836        6H      LDR      r0,[pc,#216] ; [0x80003c8] = 0x40021000
        0x080002ee:    6800        .h      LDR      r0,[r0,#0]
        0x080002f0:    f0400001    @...    ORR      r0,r0,#1
        0x080002f4:    4934        4I      LDR      r1,[pc,#208] ; [0x80003c8] = 0x40021000
        0x080002f6:    6008        .`      STR      r0,[r1,#0]
        0x080002f8:    4608        .F      MOV      r0,r1
        0x080002fa:    6840        @h      LDR      r0,[r0,#4]
        0x080002fc:    4934        4I      LDR      r1,[pc,#208] ; [0x80003d0] = 0xf8ff0000
        0x080002fe:    4008        .@      ANDS     r0,r0,r1
        0x08000300:    4931        1I      LDR      r1,[pc,#196] ; [0x80003c8] = 0x40021000
        0x08000302:    6048        H`      STR      r0,[r1,#4]
        0x08000304:    4608        .F      MOV      r0,r1
        0x08000306:    6800        .h      LDR      r0,[r0,#0]
        0x08000308:    4932        2I      LDR      r1,[pc,#200] ; [0x80003d4] = 0xfef6ffff
        0x0800030a:    4008        .@      ANDS     r0,r0,r1
        0x0800030c:    492e        .I      LDR      r1,[pc,#184] ; [0x80003c8] = 0x40021000        r1 = 0x40021000
        0x0800030e:    6008        .`      STR      r0,[r1,#0]
        0x08000310:    4608        .F      MOV      r0,r1
        0x08000312:    6800        .h      LDR      r0,[r0,#0]
        0x08000314:    f4202080     ..     BIC      r0,r0,#0x40000
        0x08000318:    6008        .`      STR      r0,[r1,#0]
        0x0800031a:    4608        .F      MOV      r0,r1
        0x0800031c:    6840        @h      LDR      r0,[r0,#4]
        0x0800031e:    f42000fe     ...    BIC      r0,r0,#0x7f0000
        0x08000322:    6048        H`      STR      r0,[r1,#4]
        0x08000324:    f44f001f    O...    MOV      r0,#0x9f0000
        0x08000328:    6088        .`      STR      r0,[r1,#8]
        0x0800032a:    f7ffffda    ....    BL       SetSysClock ; 0x80002e2
        0x0800032e:    f04f6000    O..`    MOV      r0,#0x8000000
        0x08000332:    4929        )I      LDR      r1,[pc,#164] ; [0x80003d8] = 0xe000ed08
        0x08000334:    6008        .`      STR      r0,[r1,#0]
        0x08000336:    bd10        ..      POP      {r4,pc}
    SystemCoreClockUpdate
        0x08000338:    b510        ..      PUSH     {r4,lr}
        0x0800033a:    2100        .!      MOVS     r1,#0
        0x0800033c:    2000        .       MOVS     r0,#0
        0x0800033e:    2200        ."      MOVS     r2,#0
        0x08000340:    4b21        !K      LDR      r3,[pc,#132] ; [0x80003c8] = 0x40021000
        0x08000342:    685b        [h      LDR      r3,[r3,#4]
        0x08000344:    f003010c    ....    AND      r1,r3,#0xc
        0x08000348:    b121        !.      CBZ      r1,0x8000354 ; SystemCoreClockUpdate + 28
        0x0800034a:    2904        .)      CMP      r1,#4
        0x0800034c:    d006        ..      BEQ      0x800035c ; SystemCoreClockUpdate + 36
        0x0800034e:    2908        .)      CMP      r1,#8
        0x08000350:    d128        (.      BNE      0x80003a4 ; SystemCoreClockUpdate + 108
        0x08000352:    e007        ..      B        0x8000364 ; SystemCoreClockUpdate + 44
        0x08000354:    4b21        !K      LDR      r3,[pc,#132] ; [0x80003dc] = 0x7a1200
        0x08000356:    4c22        "L      LDR      r4,[pc,#136] ; [0x80003e0] = 0x20000000
        0x08000358:    6023        #`      STR      r3,[r4,#0]
        0x0800035a:    e027        '.      B        0x80003ac ; SystemCoreClockUpdate + 116
        0x0800035c:    4b1f        .K      LDR      r3,[pc,#124] ; [0x80003dc] = 0x7a1200
        0x0800035e:    4c20         L      LDR      r4,[pc,#128] ; [0x80003e0] = 0x20000000
        0x08000360:    6023        #`      STR      r3,[r4,#0]
        0x08000362:    e023        #.      B        0x80003ac ; SystemCoreClockUpdate + 116
        0x08000364:    4b18        .K      LDR      r3,[pc,#96] ; [0x80003c8] = 0x40021000
        0x08000366:    685b        [h      LDR      r3,[r3,#4]
        0x08000368:    f4031070    ..p.    AND      r0,r3,#0x3c0000
        0x0800036c:    4b16        .K      LDR      r3,[pc,#88] ; [0x80003c8] = 0x40021000
        0x0800036e:    685b        [h      LDR      r3,[r3,#4]
        0x08000370:    f4033280    ...2    AND      r2,r3,#0x10000
        0x08000374:    2302        .#      MOVS     r3,#2
        0x08000376:    eb034090    ...@    ADD      r0,r3,r0,LSR #18
        0x0800037a:    b922        ".      CBNZ     r2,0x8000386 ; SystemCoreClockUpdate + 78
        0x0800037c:    4b19        .K      LDR      r3,[pc,#100] ; [0x80003e4] = 0x3d0900
        0x0800037e:    4343        CC      MULS     r3,r0,r3
        0x08000380:    4c17        .L      LDR      r4,[pc,#92] ; [0x80003e0] = 0x20000000
        0x08000382:    6023        #`      STR      r3,[r4,#0]
        0x08000384:    e00d        ..      B        0x80003a2 ; SystemCoreClockUpdate + 106
        0x08000386:    4b10        .K      LDR      r3,[pc,#64] ; [0x80003c8] = 0x40021000
        0x08000388:    685b        [h      LDR      r3,[r3,#4]
        0x0800038a:    f4033300    ...3    AND      r3,r3,#0x20000
        0x0800038e:    b123        #.      CBZ      r3,0x800039a ; SystemCoreClockUpdate + 98
        0x08000390:    4b14        .K      LDR      r3,[pc,#80] ; [0x80003e4] = 0x3d0900
        0x08000392:    4343        CC      MULS     r3,r0,r3
        0x08000394:    4c12        .L      LDR      r4,[pc,#72] ; [0x80003e0] = 0x20000000
        0x08000396:    6023        #`      STR      r3,[r4,#0]
        0x08000398:    e003        ..      B        0x80003a2 ; SystemCoreClockUpdate + 106
        0x0800039a:    4b10        .K      LDR      r3,[pc,#64] ; [0x80003dc] = 0x7a1200
        0x0800039c:    4343        CC      MULS     r3,r0,r3
        0x0800039e:    4c10        .L      LDR      r4,[pc,#64] ; [0x80003e0] = 0x20000000
        0x080003a0:    6023        #`      STR      r3,[r4,#0]
        0x080003a2:    e003        ..      B        0x80003ac ; SystemCoreClockUpdate + 116
        0x080003a4:    4b0d        .K      LDR      r3,[pc,#52] ; [0x80003dc] = 0x7a1200
        0x080003a6:    4c0e        .L      LDR      r4,[pc,#56] ; [0x80003e0] = 0x20000000
        0x080003a8:    6023        #`      STR      r3,[r4,#0]
        0x080003aa:    bf00        ..      NOP      
        0x080003ac:    bf00        ..      NOP      
        0x080003ae:    4b06        .K      LDR      r3,[pc,#24] ; [0x80003c8] = 0x40021000        r3 = 0x40021000
        0x080003b0:    685b        [h      LDR      r3,[r3,#4]  ; r3 = *(0x40021004) RCC_CFGR寄存器
        0x080003b2:    f3c31303    ....    UBFX     r3,r3,#4,#4
        0x080003b6:    4c0c        .L      LDR      r4,[pc,#48] ; [0x80003e8] = 0x20000004      r4 = 0x20000004
        0x080003b8:    5ce1        .\      LDRB     r1,[r4,r3]
        0x080003ba:    4b09        .K      LDR      r3,[pc,#36] ; [0x80003e0] = 0x20000000        r3 = 0x20000000
        0x080003bc:    681b        .h      LDR      r3,[r3,#0]    ;
        0x080003be:    40cb        .@      LSRS     r3,r3,r1
        0x080003c0:    4c07        .L      LDR      r4,[pc,#28] ; [0x80003e0] = 0x20000000
        0x080003c2:    6023        #`      STR      r3,[r4,#0]
        0x080003c4:    bd10        ..      POP      {r4,pc}
    $d
        0x080003c6:    0000        ..      DCW    0
        0x080003c8:    40021000    ...@    DCD    1073876992
        0x080003cc:    40022000    . .@    DCD    1073881088
        0x080003d0:    f8ff0000    ....    DCD    4177461248
        0x080003d4:    fef6ffff    ....    DCD    4277600255
        0x080003d8:    e000ed08    ....    DCD    3758157064
        0x080003dc:    007a1200    ..z.    DCD    8000000
        0x080003e0:    20000000    ...     DCD    536870912
        0x080003e4:    003d0900    ..=.    DCD    4000000
        0x080003e8:    20000004    ...     DCD    536870916
    $t
    .text
    malloc
        0x080003ec:    b570        p.      PUSH     {r4-r6,lr}
        0x080003ee:    4606        .F      MOV      r6,r0
        0x080003f0:    f000f856    ..V.    BL       __rt_heap_descriptor ; 0x80004a0
        0x080003f4:    6805        .h      LDR      r5,[r0,#0]
        0x080003f6:    f106000b    ....    ADD      r0,r6,#0xb
        0x080003fa:    f0200407     ...    BIC      r4,r0,#7
        0x080003fe:    42b4        .B      CMP      r4,r6
        0x08000400:    bf9c        ..      ITT      LS
        0x08000402:    2000        .       MOVLS    r0,#0
        0x08000404:    bd70        p.      POPLS    {r4-r6,pc}
        0x08000406:    462b        +F      MOV      r3,r5
        0x08000408:    686a        jh      LDR      r2,[r5,#4]
        0x0800040a:    b1ba        ..      CBZ      r2,0x800043c ; malloc + 80
        0x0800040c:    6810        .h      LDR      r0,[r2,#0]
        0x0800040e:    42a0        .B      CMP      r0,r4
        0x08000410:    d310        ..      BCC      0x8000434 ; malloc + 72
        0x08000412:    f1040108    ....    ADD      r1,r4,#8
        0x08000416:    4288        .B      CMP      r0,r1
        0x08000418:    bf3c        <.      ITT      CC
        0x0800041a:    6850        Ph      LDRCC    r0,[r2,#4]
        0x0800041c:    6058        X`      STRCC    r0,[r3,#4]
        0x0800041e:    d307        ..      BCC      0x8000430 ; malloc + 68
        0x08000420:    6851        Qh      LDR      r1,[r2,#4]
        0x08000422:    1910        ..      ADDS     r0,r2,r4
        0x08000424:    6041        A`      STR      r1,[r0,#4]
        0x08000426:    6811        .h      LDR      r1,[r2,#0]
        0x08000428:    1b09        ..      SUBS     r1,r1,r4
        0x0800042a:    6001        .`      STR      r1,[r0,#0]
        0x0800042c:    6058        X`      STR      r0,[r3,#4]
        0x0800042e:    6014        .`      STR      r4,[r2,#0]
        0x08000430:    1d10        ..      ADDS     r0,r2,#4
        0x08000432:    bd70        p.      POP      {r4-r6,pc}
        0x08000434:    4613        .F      MOV      r3,r2
        0x08000436:    6852        Rh      LDR      r2,[r2,#4]
        0x08000438:    2a00        .*      CMP      r2,#0
        0x0800043a:    d1e7        ..      BNE      0x800040c ; malloc + 32
        0x0800043c:    4621        !F      MOV      r1,r4
        0x0800043e:    4628        (F      MOV      r0,r5
        0x08000440:    f000f836    ..6.    BL       __Heap_Full ; 0x80004b0
        0x08000444:    2800        .(      CMP      r0,#0
        0x08000446:    d1de        ..      BNE      0x8000406 ; malloc + 26
        0x08000448:    bd70        p.      POP      {r4-r6,pc}
    .text
    free
        0x0800044a:    b570        p.      PUSH     {r4-r6,lr}
        0x0800044c:    4604        .F      MOV      r4,r0
        0x0800044e:    1f05        ..      SUBS     r5,r0,#4
        0x08000450:    f000f826    ..&.    BL       __rt_heap_descriptor ; 0x80004a0
        0x08000454:    6800        .h      LDR      r0,[r0,#0]
        0x08000456:    2c00        .,      CMP      r4,#0
        0x08000458:    bf14        ..      ITE      NE
        0x0800045a:    6844        Dh      LDRNE    r4,[r0,#4]
        0x0800045c:    bd70        p.      POPEQ    {r4-r6,pc}
        0x0800045e:    2c00        .,      CMP      r4,#0
        0x08000460:    bf18        ..      IT       NE
        0x08000462:    42ac        .B      CMPNE    r4,r5
        0x08000464:    bf3c        <.      ITT      CC
        0x08000466:    4620         F      MOVCC    r0,r4
        0x08000468:    6864        dh      LDRCC    r4,[r4,#4]
        0x0800046a:    d3f8        ..      BCC      0x800045e ; free + 20
        0x0800046c:    6801        .h      LDR      r1,[r0,#0]
        0x0800046e:    180a        ..      ADDS     r2,r1,r0
        0x08000470:    42aa        .B      CMP      r2,r5
        0x08000472:    bf18        ..      IT       NE
        0x08000474:    6045        E`      STRNE    r5,[r0,#4]
        0x08000476:    d103        ..      BNE      0x8000480 ; free + 54
        0x08000478:    682a        *h      LDR      r2,[r5,#0]
        0x0800047a:    4605        .F      MOV      r5,r0
        0x0800047c:    4411        .D      ADD      r1,r1,r2
        0x0800047e:    6001        .`      STR      r1,[r0,#0]
        0x08000480:    6828        (h      LDR      r0,[r5,#0]
        0x08000482:    1941        A.      ADDS     r1,r0,r5
        0x08000484:    42a1        .B      CMP      r1,r4
        0x08000486:    bf1c        ..      ITT      NE
        0x08000488:    606c        l`      STRNE    r4,[r5,#4]
        0x0800048a:    bd70        p.      POPNE    {r4-r6,pc}
        0x0800048c:    6861        ah      LDR      r1,[r4,#4]
        0x0800048e:    6069        i`      STR      r1,[r5,#4]
        0x08000490:    6821        !h      LDR      r1,[r4,#0]
        0x08000492:    4408        .D      ADD      r0,r0,r1
        0x08000494:    6028        (`      STR      r0,[r5,#0]
        0x08000496:    bd70        p.      POP      {r4-r6,pc}
    .text
    __use_two_region_memory
        0x08000498:    4770        pG      BX       lr
    __rt_heap_escrow
        0x0800049a:    4770        pG      BX       lr
    __rt_heap_expand
        0x0800049c:    4770        pG      BX       lr
        0x0800049e:    0000        ..      MOVS     r0,r0
    .text
    __rt_heap_descriptor
        0x080004a0:    4800        .H      LDR      r0,[pc,#0] ; [0x80004a4] = 0x2000001c
        0x080004a2:    4770        pG      BX       lr
    $d
        0x080004a4:    2000001c    ...     DCD    536870940
    $t
    .text
    __use_no_heap
        0x080004a8:    4770        pG      BX       lr
    __heap$guard
        0x080004aa:    4770        pG      BX       lr
    .text
    _terminate_user_alloc
        0x080004ac:    4770        pG      BX       lr
    _init_user_alloc
        0x080004ae:    4770        pG      BX       lr
    __Heap_Full
        0x080004b0:    b538        8.      PUSH     {r3-r5,lr}
        0x080004b2:    4604        .F      MOV      r4,r0
        0x080004b4:    460a        .F      MOV      r2,r1
        0x080004b6:    2000        .       MOVS     r0,#0
        0x080004b8:    4669        iF      MOV      r1,sp
        0x080004ba:    f3af8000    ....    NOP.W    
        0x080004be:    2800        .(      CMP      r0,#0
        0x080004c0:    bf08        ..      IT       EQ
        0x080004c2:    bd38        8.      POPEQ    {r3-r5,pc}
        0x080004c4:    4602        .F      MOV      r2,r0
        0x080004c6:    9900        ..      LDR      r1,[sp,#0]
        0x080004c8:    4620         F      MOV      r0,r4
        0x080004ca:    f000f83f    ..?.    BL       __Heap_ProvideMemory ; 0x800054c
        0x080004ce:    2001        .       MOVS     r0,#1
        0x080004d0:    bd38        8.      POP      {r3-r5,pc}
    __Heap_Broken
        0x080004d2:    2001        .       MOVS     r0,#1
        0x080004d4:    f000b854    ..T.    B.W      __rt_SIGRTMEM ; 0x8000580
    _init_alloc
        0x080004d8:    b5f8        ..      PUSH     {r3-r7,lr}
        0x080004da:    f3af8000    ....    NOP.W    
        0x080004de:    4605        .F      MOV      r5,r0
        0x080004e0:    2000        .       MOVS     r0,#0
        0x080004e2:    460c        .F      MOV      r4,r1
        0x080004e4:    2010        .       MOVS     r0,#0x10
        0x080004e6:    bf00        ..      NOP      
        0x080004e8:    4606        .F      MOV      r6,r0
        0x080004ea:    19a8        ..      ADDS     r0,r5,r6
        0x080004ec:    42a0        .B      CMP      r0,r4
        0x080004ee:    d90d        ..      BLS      0x800050c ; _init_alloc + 52
        0x080004f0:    4632        2F      MOV      r2,r6
        0x080004f2:    4669        iF      MOV      r1,sp
        0x080004f4:    2000        .       MOVS     r0,#0
        0x080004f6:    f3af8000    ....    NOP.W    
        0x080004fa:    0007        ..      MOVS     r7,r0
        0x080004fc:    bf08        ..      IT       EQ
        0x080004fe:    f000f83f    ..?.    BLEQ     __rt_SIGRTMEM ; 0x8000580
        0x08000502:    9800        ..      LDR      r0,[sp,#0]
        0x08000504:    42a0        .B      CMP      r0,r4
        0x08000506:    bf18        ..      IT       NE
        0x08000508:    4605        .F      MOVNE    r5,r0
        0x0800050a:    19c4        ..      ADDS     r4,r0,r7
        0x0800050c:    f7ffffc8    ....    BL       __rt_heap_descriptor ; 0x80004a0
        0x08000510:    6005        .`      STR      r5,[r0,#0]
        0x08000512:    4607        .F      MOV      r7,r0
        0x08000514:    1df0        ..      ADDS     r0,r6,#7
        0x08000516:    f0200007     ...    BIC      r0,r0,#7
        0x0800051a:    1946        F.      ADDS     r6,r0,r5
        0x0800051c:    4628        (F      MOV      r0,r5
        0x0800051e:    f000f80a    ....    BL       __Heap_Initialize ; 0x8000536
        0x08000522:    42b4        .B      CMP      r4,r6
        0x08000524:    bf08        ..      IT       EQ
        0x08000526:    bdf8        ..      POPEQ    {r3-r7,pc}
        0x08000528:    1ba2        ..      SUBS     r2,r4,r6
        0x0800052a:    4631        1F      MOV      r1,r6
        0x0800052c:    6838        8h      LDR      r0,[r7,#0]
        0x0800052e:    e8bd40f8    ...@    POP      {r3-r7,lr}
        0x08000532:    f000b80b    ....    B.W      __Heap_ProvideMemory             ; 0x800054c
    .text
    __Heap_Initialize
        0x08000536:    2100        .!      MOVS     r1,#0
        0x08000538:    6001        .`      STR      r1,[r0,#0]
        0x0800053a:    e9c01001    ....    STRD     r1,r0,[r0,#4]
        0x0800053e:    4770        pG      BX       lr
    __Heap_DescSize
        0x08000540:    2010        .       MOVS     r0,#0x10
        0x08000542:    4770        pG      BX       lr
    .text
    __user_libspace
    __user_perproc_libspace
    __user_perthread_libspace
        0x08000544:    4800        .H      LDR      r0,[pc,#0]                         ; [0x8000548] = 0x20000014        r0 = 0x20000014
        0x08000546:    4770        pG      BX       lr
    $d
        0x08000548:    20000014    ...     DCD    536870932
    $t
    .text
    __Heap_ProvideMemory
        0x0800054c:    4603        .F      MOV      r3,r0
        0x0800054e:    6840        @h      LDR      r0,[r0,#4]
        0x08000550:    468c        .F      MOV      r12,r1
        0x08000552:    2800        .(      CMP      r0,#0
        0x08000554:    bf18        ..      IT       NE
        0x08000556:    4288        .B      CMPNE    r0,r1
        0x08000558:    bf3c        <.      ITT      CC
        0x0800055a:    4603        .F      MOVCC    r3,r0
        0x0800055c:    6840        @h      LDRCC    r0,[r0,#4]
        0x0800055e:    d3f8        ..      BCC      0x8000552 ; __Heap_ProvideMemory + 6
        0x08000560:    6818        .h      LDR      r0,[r3,#0]
        0x08000562:    4418        .D      ADD      r0,r0,r3
        0x08000564:    4288        .B      CMP      r0,r1
        0x08000566:    d007        ..      BEQ      0x8000578 ; __Heap_ProvideMemory + 44
        0x08000568:    f10c0003    ....    ADD      r0,r12,#3
        0x0800056c:    f0200007     ...    BIC      r0,r0,#7
        0x08000570:    1d00        ..      ADDS     r0,r0,#4
        0x08000572:    1a41        A.      SUBS     r1,r0,r1
        0x08000574:    1a52        R.      SUBS     r2,r2,r1
        0x08000576:    4601        .F      MOV      r1,r0
        0x08000578:    1d08        ..      ADDS     r0,r1,#4
        0x0800057a:    600a        .`      STR      r2,[r1,#0]
        0x0800057c:    f7ffbf65    ..e.    B.W      free ; 0x800044a
    .text
    __rt_SIGRTMEM
        0x08000580:    b510        ..      PUSH     {r4,lr}
        0x08000582:    f000f835    ..5.    BL       __rt_SIGRTMEM_inner ; 0x80005f0
        0x08000586:    e8bd4010    ...@    POP      {r4,lr}
        0x0800058a:    f000b82c    ..,.    B.W      __sig_exit ; 0x80005e6
    .text
    __I$use$semihosting
    __use_no_semihosting_swi
        0x0800058e:    4770        pG      BX       lr
    .text
    .text
    __semihosting_library_function
    __user_setup_stackheap
        0x08000590:    4675        uF      MOV      r5,lr
        0x08000592:    f7ffffd7    ....    BL       __user_libspace                 ; 0x8000544        r0 = 0x20000014
        0x08000596:    46ae        .F      MOV      lr,r5                            ; 还原lr的值
        0x08000598:    0005        ..      MOVS     r5,r0                            ; r5 = 0x20000014
        0x0800059a:    4669        iF      MOV      r1,sp                            ; sp = 0x20000678 r1 = 0x20000678  ?不确定
        0x0800059c:    4653        SF      MOV      r3,r10                            ; r3 = 0x80006AC
        0x0800059e:    f0200007     ...    BIC      r0,r0,#7                        ; ??
        0x080005a2:    4685        .F      MOV      sp,r0
        0x080005a4:    b018        ..      ADD      sp,sp,#0x60
        0x080005a6:    b520         .      PUSH     {r5,lr}
        0x080005a8:    f7fffe00    ....    BL       __user_initial_stackheap         ; 0x80001ac  r0 = 0x20000078, r1 = 0x20000678, r2 = 0x20000278, r3 = 0x20000278
        0x080005ac:    e8bd4020    .. @    POP      {r5,lr}
        0x080005b0:    f04f0600    O...    MOV      r6,#0
        0x080005b4:    f04f0700    O...    MOV      r7,#0
        0x080005b8:    f04f0800    O...    MOV      r8,#0
        0x080005bc:    f04f0b00    O...    MOV      r11,#0
        0x080005c0:    f0210107    !...    BIC      r1,r1,#7
        0x080005c4:    46ac        .F      MOV      r12,r5
        0x080005c6:    e8ac09c0    ....    STM      r12!,{r6-r8,r11}
        0x080005ca:    e8ac09c0    ....    STM      r12!,{r6-r8,r11}
        0x080005ce:    e8ac09c0    ....    STM      r12!,{r6-r8,r11}
        0x080005d2:    e8ac09c0    ....    STM      r12!,{r6-r8,r11}
        0x080005d6:    468d        .F      MOV      sp,r1
        0x080005d8:    4770        pG      BX       lr
    .text
    exit
        0x080005da:    4604        .F      MOV      r4,r0
        0x080005dc:    f3af8000    ....    NOP.W    
        0x080005e0:    4620         F      MOV      r0,r4
        0x080005e2:    f7fffdce    ....    BL       __rt_exit ; 0x8000182
    .text
    __sig_exit
        0x080005e6:    2800        .(      CMP      r0,#0
        0x080005e8:    d001        ..      BEQ      0x80005ee ; __sig_exit + 8
        0x080005ea:    f000b829    ..).    B.W      _sys_exit ; 0x8000640
        0x080005ee:    4770        pG      BX       lr
    .text
    __rt_SIGRTMEM_inner
        0x080005f0:    b510        ..      PUSH     {r4,lr}
        0x080005f2:    2801        .(      CMP      r0,#1
        0x080005f4:    d005        ..      BEQ      0x8000602 ; __rt_SIGRTMEM_inner + 18
        0x080005f6:    2100        .!      MOVS     r1,#0
        0x080005f8:    a003        ..      ADR      r0,{pc}+0x10 ; 0x8000608
        0x080005fa:    f000f827    ..'.    BL       __default_signal_display ; 0x800064c
        0x080005fe:    2001        .       MOVS     r0,#1
        0x08000600:    bd10        ..      POP      {r4,pc}
        0x08000602:    a109        ..      ADR      r1,{pc}+0x26 ; 0x8000628
        0x08000604:    e7f8        ..      B        0x80005f8 ; __rt_SIGRTMEM_inner + 8
    $d
        0x08000606:    0000        ..      DCW    0
        0x08000608:    52474953    SIGR    DCD    1380403539
        0x0800060c:    4d454d54    TMEM    DCD    1296387412
        0x08000610:    754f203a    : Ou    DCD    1968119866
        0x08000614:    666f2074    t of    DCD    1718558836
        0x08000618:    61656820     hea    DCD    1634035744
        0x0800061c:    656d2070    p me    DCD    1701650544
        0x08000620:    79726f6d    mory    DCD    2037542765
        0x08000624:    00000000    ....    DCD    0
        0x08000628:    6548203a    : He    DCD    1699225658
        0x0800062c:    6d207061    ap m    DCD    1830842465
        0x08000630:    726f6d65    emor    DCD    1919905125
        0x08000634:    6f632079    y co    DCD    1868767353
        0x08000638:    70757272    rrup    DCD    1886745202
        0x0800063c:    00646574    ted.    DCD    6579572
    $t
    .text
    _sys_exit
        0x08000640:    4901        .I      LDR      r1,[pc,#4] ; [0x8000648] = 0x20026
        0x08000642:    2018        .       MOVS     r0,#0x18
        0x08000644:    beab        ..      BKPT     #0xab
        0x08000646:    e7fe        ..      B        0x8000646 ; _sys_exit + 6
    $d
        0x08000648:    00020026    &...    DCD    131110
    $t
    .text
    __default_signal_display
        0x0800064c:    b570        p.      PUSH     {r4-r6,lr}
        0x0800064e:    4605        .F      MOV      r5,r0
        0x08000650:    460c        .F      MOV      r4,r1
        0x08000652:    200a        .       MOVS     r0,#0xa
        0x08000654:    e000        ..      B        0x8000658 ; __default_signal_display + 12
        0x08000656:    1c6d        m.      ADDS     r5,r5,#1
        0x08000658:    f000f811    ....    BL       _ttywrch ; 0x800067e
        0x0800065c:    b135        5.      CBZ      r5,0x800066c ; __default_signal_display + 32
        0x0800065e:    7828        (x      LDRB     r0,[r5,#0]
        0x08000660:    2800        .(      CMP      r0,#0
        0x08000662:    d1f8        ..      BNE      0x8000656 ; __default_signal_display + 10
        0x08000664:    e002        ..      B        0x800066c ; __default_signal_display + 32
        0x08000666:    1c64        d.      ADDS     r4,r4,#1
        0x08000668:    f000f809    ....    BL       _ttywrch ; 0x800067e
        0x0800066c:    b114        ..      CBZ      r4,0x8000674 ; __default_signal_display + 40
        0x0800066e:    7820         x      LDRB     r0,[r4,#0]
        0x08000670:    2800        .(      CMP      r0,#0
        0x08000672:    d1f8        ..      BNE      0x8000666 ; __default_signal_display + 26
        0x08000674:    e8bd4070    ..p@    POP      {r4-r6,lr}
        0x08000678:    200a        .       MOVS     r0,#0xa
        0x0800067a:    f3af8000    ....    NOP.W    
    .text
    _ttywrch
        0x0800067e:    b508        ..      PUSH     {r3,lr}
        0x08000680:    4669        iF      MOV      r1,sp
        0x08000682:    f88d0000    ....    STRB     r0,[sp,#0]
        0x08000686:    2003        .       MOVS     r0,#3
        0x08000688:    beab        ..      BKPT     #0xab
        0x0800068a:    bd08        ..      POP      {r3,pc}
    $d.realdata
    Region$$Table$$Base
        0x0800068c:    080006ac    ....    DCD    134219436
        0x08000690:    20000000    ...     DCD    536870912
        0x08000694:    00000014    ....    DCD    20
        0x08000698:    08000128    (...    DCD    134218024
        0x0800069c:    080006c0    ....    DCD    134219456
        0x080006a0:    20000014    ...     DCD    536870932
        0x080006a4:    00000664    d...    DCD    1636
        0x080006a8:    08000144    D...    DCD    134218052
    Region$$Table$$Limit

** Section #2 'RW_IRAM1' (SHT_PROGBITS) [SHF_ALLOC + SHF_WRITE]
    Size   : 20 bytes (alignment 4)
    Address: 0x20000000


** Section #3 'RW_IRAM1' (SHT_NOBITS) [SHF_ALLOC + SHF_WRITE]
    Size   : 1636 bytes (alignment 8)
    Address: 0x20000014


** Section #4 '.debug_abbrev' (SHT_PROGBITS)
    Size   : 1476 bytes


** Section #5 '.debug_frame' (SHT_PROGBITS)
    Size   : 1472 bytes


** Section #6 '.debug_info' (SHT_PROGBITS)
    Size   : 2840 bytes


** Section #7 '.debug_line' (SHT_PROGBITS)
    Size   : 1000 bytes


** Section #8 '.debug_loc' (SHT_PROGBITS)
    Size   : 368 bytes


** Section #9 '.debug_macinfo' (SHT_PROGBITS)
    Size   : 2324 bytes


** Section #10 '.debug_pubnames' (SHT_PROGBITS)
    Size   : 358 bytes


** Section #11 '.symtab' (SHT_SYMTAB)
    Size   : 5280 bytes (alignment 4)
    String table #12 '.strtab'
    Last local symbol no. 181


** Section #12 '.strtab' (SHT_STRTAB)
    Size   : 4956 bytes


** Section #13 '.note' (SHT_NOTE)
    Size   : 28 bytes (alignment 4)


** Section #14 '.comment' (SHT_PROGBITS)
    Size   : 3168 bytes


** Section #15 '.shstrtab' (SHT_STRTAB)
    Size   : 156 bytes



问题总结:

1、生成的HEX文件0x80000000地址处存的栈顶地址有什么作用?在什么时候使用?

2、堆栈初始化具体实现了什么功能?


0 0