att汇编小知识

gcc 指令和binuntils(as ld objdump)都可以进行编译汇编程序
gcc -S 指令汇编程序时候 会把程序编译成一个 main为入口地址的程序
但是as ld 会把汇编程序编译链接成_start入口的地址 其实并没有什么太大区别
汇编程序中以.开头的名称并不是指令的助记符,不会被翻译成机器指令,而是给汇编器一些特殊指示,称为汇编指示(Assembler Directive)或伪操作(Pseudo-operation),由于它不是真正的指令所以加个“伪”字。.section指示把代码划分成若干个段(Section),程序被操作系统加载执行时,每个段被加载到不同的地址,操作系统对不同的页面设置不同的读、写、执行权限。
data text bss都是用来划分不同的段 不同的段作用不一样 存放的数据不一样
比如.section .data是用来存放数据的 声明后面的数据都是一个数据 .section .text是声明后面的数据是存放程序执行指令 也就是代码段
在 bss中有 . lcomm 和 .comm ,前者表示局部变量后者表示全局变量 比如一个程序
.section .bss
.lcomm buffer ,10000
.section .text
.global _start
_start:

movl $1, %eax
movl $0, %ebx
int $0x80
在bss段中声明数据的一个好处是数据不会包含在可执行程序 中 ,就像我们的c++语言的static int a;一样
他默认会存储在bss段 不会占用最终执行文件的大小 在数据中定义数据时,它必须被包含在可执行程序,因为必须使用特定值初始化它。因为他不能使用程序数据初始化 bss 段中声明的数据区域,所以内存区域被保留在运行时使用,并且不包含在最终的程序中。
总之记住一点 bss段存储的是未初始化的数据
text段存储的是初始化的变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值