编译和链接的区别

先看这样一篇汇编代码

 .section .text    
   
 .global _start   
 _start:      
     nop
     movl $4, %eax  
     movl $1, %ebx  
     movl $5, %ecx  
     movl $13, %edx  
     movl %eax,%ebx
    
   
     movl $1, %eax  
     movl $0, %ebx  
     int $0x80  

使用 as -gstabs 20160001.s -o 2016.o得到的是二进制代码

使用ld -o 2016 2016.o得到的是可执行文件

将中间代码也就是二进制代码,通过反汇编得到的是


最左边一列代表的是相对位置,位置是从0开始的,中间的是机器码,最右边一列是汇编指令

可以看到,中间代码没有被装载进内存中,因为地址都是以相对地址来表示的。

将可执行代码2016反汇编得到的


同样的道理,最左边的是指令地址,但是很明显,这个地址是32位的,说明代码已经装载进内存中了。

这个例子说明了中间代码链接前和链接后之间的区别。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值