打印

ld之解『原』

[复制链接]
111|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
追光少年|  楼主 | 2018-9-28 11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
因为汇编程序被转化成可执行文件时,连接器必须知道指令码中的起始地址。为了解决这个问题,GUN汇编器声明一个默认标签,或者说是标志符,它就是_start。如果连接器找不到_start,就会生成错误信息;错误信息我就不贴出来了。当然也可以使用_start以为的标签作为起始地点;但是必须通过-e来说明。

        比如有一个汇编文件cpuid.s;它转化成可执行的文件cpuid。是通过:

          as -o cpuid.o cpuid.s     #起始标签为_start

          ld -o cpuid cpuid.o

或:

         as -o cpuid.o cpuid.s     #起始标签为_start1

           ld -e _start1 -o cpuid cpuid.o

          我们知道GCC它不仅能编译汇编语言,还能编译高级语言如C语言。那么GCC它又是以什么标签来作为起始地址?我们知道C语言中至少有main函数;所以main便是gcc要找的标签。如果要用gcc来编译上面的cpuid.s,必须把源文件中的

          .globl _start

         _start:   

改为.globl main

         main:

         不知道大家明白了不。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

379

主题

379

帖子

0

粉丝