【ARM学习笔记一】链接器

链接器的作用

c文件和汇编文件会被编译为.o 文件,链接器把所有.o文件链接为二进制可执行文件。

【ARM学习笔记一】链接器

有三种可执行文件:一种是.elf,一种是.bin,.hex是一种特殊的可执行文件

链接器的工作步骤:
1.符号解析(Symbol Resolution)
2.重定向(Relocating)

1.符号解析

##   main.s
arr:    .byte 10, 20, 25         @ Read-only array of bytes
eoa:                             @ Address of end of array + 1

        .align
start:
        ldr   r0, =arr           @ r0 = &arr
        ldr   r1, =eoa           @ r1 = &eoa

        bl    sum                @ Invoke the sum subroutine

stop:   b stop


##  sum-sub.s
        .global sum

sum:    mov   r3, #0             @ r3 = 0
loop:   ldrb  r2, [r0], #1       @ r2 = *r0++    ; Get array element
        add   r3, r2, r3         @ r3 += r2      ; Calculate sum
        cmp   r0, r1             @ if (r0 != r1) ; Check if hit end-of-array
        bne   loop               @ goto loop  ; Loop
        mov   pc, lr             @ pc = lr       ; Return when done</font>

## 使用nm工具可以查看xxx.o文件的所有符号标签
<font size="4">$ arm-nm main.o
00000004 t arr
00000007 t eoa
00000008 t start
00000018 t stop
               U sum

$ arm-nm sum-sub.o
00000004 t loop
00000000 T sum</font>

#这里  "t" 表示 这个符号是被定义的
#"U" 表示这个符号没有被定义(undefined)
#"T" 表示这个符号是全局的(.global)

2. 重定向
重定向是改变已经分配给label的地址的过程,这包含链接所有的标签引用来反映新的分配的地址

【ARM学习笔记一】链接器

参考:​​​​​​ARM arm-ld链接器的作用 - ARM技术 - 电子工程世界-论坛

          ARM arm-ld链接器的作用 - ARM技术 - 电子工程世界-论坛

          链接脚本浅析-1119401255-ChinaUnix博客

上一篇:二进制加法


下一篇:C# 实例解释面向对象编程中的单一功能原则