您的位置:首页 > 其它

编译和链接的区别

2016-10-18 13:09 197 查看
先看这样一篇汇编代码

 .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位的,说明代码已经装载进内存中了。

这个例子说明了中间代码链接前和链接后之间的区别。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链接 编译