; 最简单的C语言工程 ; simple.c 只定义了一个空的main函数:int main(void) {} ; simple.s 只实现了__user_initial_stackheap函数 ; 生成ARM920T/DebugRel汇编代码 ; C代码入口 ; 初始化RW/ZI区域 __main [0xe28f8090] add r8,pc,#0x90 ; #0x30000098 30000004 [0xe898000f] ldmia r8,{r0-r3} 30000008 [0xe0800008] add r0,r0,r8 3000000c [0xe0811008] add r1,r1,r8 30000010 [0xe0822008] add r2,r2,r8 30000014 [0xe0833008] add r3,r3,r8 30000018 [0xe240b001] sub r11,r0,#1 3000001c [0xe242c001] sub r12,r2,#1 _move_region [0xe1500001] cmp r0,r1 30000024 [0x0a00000e] beq _zero_region 30000028 [0xe8b00070] ldmia r0!,{r4-r6} 3000002c [0xe1540005] cmp r4,r5 30000030 [0x0afffffa] beq _move_region 30000034 [0xe3140001] tst r4,#1 30000038 [0x1084400b] addne r4,r4,r11 3000003c [0xe3150001] tst r5,#1 30000040 [0x1085500b] addne r5,r5,r11 30000044 [0xe3150002] tst r5,#2 30000048 [0x10855009] addne r5,r5,r9 3000004c [0xe3c55003] bic r5,r5,#3 _move_loop [0xe2566004] subs r6,r6,#4 30000054 [0x24947004] ldrcs r7,[r4],#4 30000058 [0x24857004] strcs r7,[r5],#4 3000005c [0x8afffffb] bhi _move_loop 30000060 [0xeaffffee] b _move_region _zero_region [0xe1520003] cmp r2,r3 30000068 [0x0b000012] bleq __rt_entry ; 初始化完成 3000006c [0xe3a07000] mov r7,#0 30000070 [0xe8b20030] ldmia r2!,{r4,r5} 30000074 [0xe3140001] tst r4,#1 30000078 [0x1084400c] addne r4,r4,r12 3000007c [0xe3140002] tst r4,#2 30000080 [0x10844009] addne r4,r4,r9 30000084 [0xe3c44003] bic r4,r4,#3 _zero_loop [0xe2555004] subs r5,r5,#4 3000008c [0x24847004] strcs r7,[r4],#4 30000090 [0x8afffffc] bhi _zero_loop 30000094 [0xeafffff2] b _zero_region ; 区域信息 _region_table [0x000002bc] dcd 0x000002bc .... 3000009c [0x000002e0] dcd 0x000002e0 .... 300000a0 [0x000002e0] dcd 0x000002e0 .... 300000a4 [0x000002f8] dcd 0x000002f8 .... ; main()函数 main [0xe3a00000] * mov r0,#0 300000ac [0xe1a0f00e] mov pc,r14 _main_redirection [0xe1a0f00e] mov pc,r14 _main [0xe1a0f00e] mov pc,r14 ; 运行时 __rt_entry [0xeb00004d] bl __rt_stackheap_init 300000bc [0xeb00000d] bl __rt_lib_init 300000c0 [0xebfffff8] bl main 300000c4 [0xea000005] b exit __rt_exit [0xe92d4001] stmfd r13!,{r0,r14} 300000cc [0xeb000042] bl __rt_lib_shutdown 300000d0 [0xe8bd4001] ldmfd r13!,{r0,r14} 300000d4 [0xea000000] b __rt_abort1 __rt_abort [0xe3e00000] mvn r0,#0 __rt_abort1 [0xea000083] b _sys_exit exit [0xe92d4010] stmfd r13!,{r4,r14} 300000e4 [0xe1a04000] mov r4,r0 300000e8 [0xebffffff] bl 0x300000ec ; (exit + 0xc) 300000ec [0xe1a00004] mov r0,r4 300000f0 [0xe8bd4010] ldmfd r13!,{r4,r14} 300000f4 [0xeafffff3] b __32__rt_exit __rt_lib_init [0xe92d40f0] stmfd r13!,{r4-r7,r14} 300000fc [0xe24dd00c] sub r13,r13,#0xc 30000100 [0xe1a05001] mov r5,r1 30000104 [0xe1a04000] mov r4,r0 30000108 [0xeb00008c] bl _fp_init 3000010c [0xe3a00000] mov r0,#0 30000110 [0xe58d4000] str r4,[r13,#0] 30000114 [0xe58d5004] str r5,[r13,#4] 30000118 [0xebffffff] bl 0x3000011c ; (__rt_lib_init + 0x24) 3000011c [0xe58d0008] str r0,[r13,#8] 30000120 [0xe59f00c8] ldr r0,0x300001f0 ; = #0x000000c0 30000124 [0xe1a0100d] mov r1,r13 30000128 [0xe08f0000] add r0,pc,r0 3000012c [0xebffffff] bl 0x30000130 ; (__rt_lib_init + 0x38) 30000130 [0xe1a05000] mov r5,r0 30000134 [0xe1a06001] mov r6,r1 30000138 [0xe89d0003] ldmia r13,{r0,r1} 3000013c [0xebffffff] bl 0x30000140 ; (__rt_lib_init + 0x48) 30000140 [0xebffffff] bl 0x30000144 ; (__rt_lib_init + 0x4c) 30000144 [0xebffffff] bl 0x30000148 ; (__rt_lib_init + 0x50) 30000148 [0xe3a01000] mov r1,#0 3000014c [0xe3a00000] mov r0,#0 30000150 [0xebffffff] bl 0x30000154 ; (__rt_lib_init + 0x5c) 30000154 [0xe1a07000] mov r7,r0 30000158 [0xeb00006a] bl __user_libspace 3000015c [0xe1a04000] mov r4,r0 30000160 [0xe5807020] str r7,[r0,#0x20] 30000164 [0xe3a00000] mov r0,#0 30000168 [0xe3a01000] mov r1,#0 3000016c [0xebffffff] bl 0x30000170 ; (__rt_lib_init + 0x78) 30000170 [0xe2801001] add r1,r0,#1 30000174 [0xe5841024] str r1,[r4,#0x24] 30000178 [0xe3a01000] mov r1,#0 3000017c [0xe3a00000] mov r0,#0 30000180 [0xebffffff] bl 0x30000184 ; (__rt_lib_init + 0x8c) 30000184 [0xe5840028] str r0,[r4,#0x28] 30000188 [0xe3a00000] mov r0,#0 3000018c [0xe3a01000] mov r1,#0 30000190 [0xebffffff] bl 0x30000194 ; (__rt_lib_init + 0x9c) 30000194 [0xe584002c] str r0,[r4,#0x2c] 30000198 [0xe3a00000] mov r0,#0 3000019c [0xe3a01000] mov r1,#0 300001a0 [0xebffffff] bl 0x300001a4 ; (__rt_lib_init + 0xac) 300001a4 [0xe5840030] str r0,[r4,#0x30] 300001a8 [0xebffffff] bl 0x300001ac ; (__rt_lib_init + 0xb4) 300001ac [0xebffffff] bl 0x300001b0 ; (__rt_lib_init + 0xb8) 300001b0 [0xebffffff] bl 0x300001b4 ; (__rt_lib_init + 0xbc) 300001b4 [0xebffffff] bl 0x300001b8 ; (__rt_lib_init + 0xc0) 300001b8 [0xebffffff] bl 0x300001bc ; (__rt_lib_init + 0xc4) 300001bc [0xebffffff] bl 0x300001c0 ; (__rt_lib_init + 0xc8) 300001c0 [0xebffffff] bl 0x300001c4 ; (__rt_lib_init + 0xcc) 300001c4 [0xebffffff] bl 0x300001c8 ; (__rt_lib_init + 0xd0) 300001c8 [0xe1a00005] mov r0,r5 300001cc [0xe1a01006] mov r1,r6 300001d0 [0xe28dd00c] add r13,r13,#0xc 300001d4 [0xe8bd00f0] ldmfd r13!,{r4-r7} 300001d8 [0xe49df004] ldr pc,[r13],#4 __rt_lib_shutdown [0xe92d4008] stmfd r13!,{r3,r14} 300001e0 [0xebffffff] bl 0x300001e4 ; (__rt_lib_shutdown + 0x8) 300001e4 [0xebffffff] bl 0x300001e8 ; (__rt_lib_shutdown + 0xc) 300001e8 [0xebffffff] bl 0x300001ec ; (__rt_lib_shutdown + 0x10) 300001ec [0xe8bd8008] ldmfd r13!,{r3,pc} 300001f0 [0x000000c0] dcd 0x000000c0 .... __rt_stackheap_init [0xe1a0500e] mov r5,r14 300001f8 [0xeb000042] bl __user_libspace 300001fc [0xe1a0e005] mov r14,r5 300001fc [0xe1a0e005] mov r14,r5 30000200 [0xe1a04000] mov r4,r0 30000204 [0xe1a0100d] mov r1,r13 30000208 [0xe1a0300a] mov r3,r10 3000020c [0xe3c00007] bic r0,r0,#7 30000210 [0xe280d060] add r13,r0,#0x60 30000214 [0xe92d4010] stmfd r13!,{r4,r14} 30000218 [0xeb000042] bl __user_initial_stackheap ;调用堆栈分配函数 3000021c [0xe8bd4010] ldmfd r13!,{r4,r14} 30000220 [0xe3c1d007] bic r13,r1,#7 30000224 [0xe3a06000] mov r6,#0 30000228 [0xe3a07000] mov r7,#0 3000022c [0xe3a08000] mov r8,#0 30000230 [0xe3a0b000] mov r11,#0 30000234 [0xe1a0c004] mov r12,r4 30000238 [0xe8ac09c0] stmia r12!,{r6-r8,r11} 3000023c [0xe8ac09c0] stmia r12!,{r6-r8,r11} 30000240 [0xe8ac09c0] stmia r12!,{r6-r8,r11} 30000244 [0xe8ac09c0] stmia r12!,{r6-r8,r11} 30000248 [0xe92d4013] stmfd r13!,{r0,r1,r4,r14} 3000024c [0xe3a00000] mov r0,#0 30000250 [0xe3a01000] mov r1,#0 30000254 [0xebffffff] bl 0x30000258 ; (__rt_stackheap_init + 0x64) 30000258 [0xe2811040] add r1,r1,#0x40 3000025c [0xe0802001] add r2,r0,r1 30000260 [0xe2822f44] add r2,r2,#0x110 30000264 [0xe584201c] str r2,[r4,#0x1c] 30000268 [0xe5841018] str r1,[r4,#0x18] 3000026c [0xe3a00001] mov r0,#1 30000270 [0xe5840010] str r0,[r4,#0x10] 30000274 [0xe8bd4013] ldmfd r13!,{r0,r1,r4,r14} 30000278 [0xe5840014] str r0,[r4,#0x14] 3000027c [0xe1a01000] mov r1,r0 30000280 [0xe1a0f00e] mov pc,r14 __rt_heap_extend [0xe92d4010] stmfd r13!,{r4,r14} 30000288 [0xe92d0003] stmfd r13!,{r0,r1} 3000028c [0xeb00001d] bl __user_libspace 30000290 [0xe1a04000] mov r4,r0 30000294 [0xe8bd0003] ldmfd r13!,{r0,r1} 30000298 [0xe594301c] ldr r3,[r4,#0x1c] 3000029c [0xe04d3003] sub r3,r13,r3 300002a0 [0xe5942014] ldr r2,[r4,#0x14] 300002a4 [0xe5812000] str r2,[r1,#0] 300002a8 [0xe082e000] add r14,r2,r0 300002ac [0xe15e0003] cmp r14,r3 300002b0 [0x8a00000a] bhi _heap_overflow 300002b4 [0xe093300e] adds r3,r3,r14 300002b8 [0xe1a03063] mov r3,r3,rrx 300002bc [0xe3c33007] bic r3,r3,#7 300002c0 [0xe28e1d40] add r1,r14,#0x1000 300002c4 [0xe2811007] add r1,r1,#7 300002c8 [0xe3c11007] bic r1,r1,#7 300002cc [0xe1510003] cmp r1,r3 300002d0 [0x81a01003] movhi r1,r3 300002d4 [0xe0410002] sub r0,r1,r2 300002d8 [0xe5841014] str r1,[r4,#0x14] 300002dc [0xe8bd8010] ldmfd r13!,{r4,pc} _heap_overflow [0xe1a02000] mov r2,r0 300002e4 [0xe3a00000] mov r0,#0 300002e8 [0xebffffff] bl 0x300002ec ; (_heap_overflow + 0xc) 300002ec [0xe8bd8010] ldmfd r13!,{r4,pc} _sys_exit [0xe3a00018] mov r0,#0x18 300002f4 [0xe59f1008] ldr r1,0x30000304 ; = #0x00020026 300002f8 [0xef123456] swi 0x123456 300002fc [0xe1a0f00e] mov pc,r14 30000300 [0x00000014] dcd 0x00000014 .... 30000304 [0x00020026] dcd 0x00020026 &... __user_libspace [0xe59f0000] ldr r0,0x30000310 ; = #0x30000390 3000030c [0xe1a0f00e] mov pc,r14 30000310 [0x30000390] dcd 0x30000390 ...0 __semihosting_swi_guard [0xe1a0f00e] mov pc,r14 __rt_fp_status_addr [0xe92d4010] stmfd r13!,{r4,r14} 3000031c [0xebfffff9] bl __user_libspace 30000320 [0xe2800004] add r0,r0,#4 30000324 [0xe8bd8010] ldmfd r13!,{r4,pc} ; 自己实现的堆栈分配函数,地址在Image$$ZI$$Limit之后 __user_initial_stackheap [0xe59f000c] ldr r0,0x3000033c ; = #0x300003f0 3000032c [0xe2802e40] add r2,r0,#0x400 30000330 [0xe1a03002] mov r3,r2 30000334 [0xe2831e40] add r1,r3,#0x400 30000338 [0xe1a0f00e] mov pc,r14 3000033c [0x300003f0] dcd 0x300003f0 ...0 _fp_init [0xe92d4010] stmfd r13!,{r4,r14} 30000344 [0xebfffff3] bl __rt_fp_status_addr 30000348 [0xe3a01000] mov r1,#0 3000034c [0xe5801000] str r1,[r0,#0] __fplib_config_pureend_doubles [0xe8bd8010] ldmfd r13!,{r4,pc} ; 数据段 Region$$Table$$Base [0x00000000] dcd 0x00000000 .... 30000358 [0x00000000] dcd 0x00000000 .... 3000035c [0x00000000] dcd 0x00000000 .... 30000360 [0x00000000] dcd 0x00000000 .... 30000364 [0x00000000] dcd 0x00000000 .... 30000368 [0x00000000] dcd 0x00000000 .... 3000036c [0x00000000] dcd 0x00000000 .... 30000370 [0x00000000] dcd 0x00000000 .... 30000374 [0x00000000] dcd 0x00000000 .... ZISection$$Table$$Base [0x30000390] dcd 0x30000390 ...0 3000037c [0x00000000] dcd 0x00000000 .... 30000380 [0x30000390] dcd 0x30000390 ...0 30000384 [0x00000000] dcd 0x00000000 .... 30000388 [0x30000390] dcd 0x30000390 ...0 3000038c [0x00000060] dcd 0x00000060 `... ZISection$$Table$$Limit [0x00000000] dcd 0x00000000 .... 30000394 [0x00000000] dcd 0x00000000 .... 30000398 [0x00000000] dcd 0x00000000 .... 3000039c [0x00000000] dcd 0x00000000 .... 300003a0 [0x00000000] dcd 0x00000000 .... 300003a4 [0x00000000] dcd 0x00000000 .... 300003a8 [0x00000000] dcd 0x00000000 .... 300003ac [0x00000000] dcd 0x00000000 .... 300003b0 [0x00000000] dcd 0x00000000 .... 300003b4 [0x00000000] dcd 0x00000000 .... 300003b8 [0x00000000] dcd 0x00000000 .... 300003bc [0x00000000] dcd 0x00000000 .... 300003c0 [0x00000000] dcd 0x00000000 .... 300003c4 [0x00000000] dcd 0x00000000 .... 300003c8 [0x00000000] dcd 0x00000000 .... 300003cc [0x00000000] dcd 0x00000000 .... 300003d0 [0x00000000] dcd 0x00000000 .... 300003d4 [0x00000000] dcd 0x00000000 .... 300003d8 [0x00000000] dcd 0x00000000 .... 300003dc [0x00000000] dcd 0x00000000 .... 300003e0 [0x00000000] dcd 0x00000000 .... 300003e4 [0x00000000] dcd 0x00000000 .... 300003e8 [0x00000000] dcd 0x00000000 .... 300003ec [0x00000000] dcd 0x00000000 .... Image$$ZI$$Limit [0x00000000] dcd 0x00000000 ....