Linux内核学习第1天

举报
远航 | FIBOS 发表于 2020/11/30 22:23:01 2020/11/30
【摘要】 内核编程语言和环境 1.      as86汇编器  语法: as[option] –o objfile srcfile .表示编译过程中的位置计数器 Objfile分为三个段(区):正文段(.text):程序的执行代码和只读数据 数据段(.data):可读/写的数据 未初始化数据段(.bss...

内核编程语言和环境

1.      as86汇编器 

语法: as[option] –o objfile srcfile

.表示编译过程中的位置计数器

Objfile分为三个段(区):正文段(.text):程序的执行代码和只读数据

数据段(.data):可读/写的数据

未初始化数据段(.bss)

 

 

2.      GNU as汇编

格式:as [option] [-o objfile] [srcfile.s]

 

3.      指令(操作码):CPU执行的操作

操作数:指令操作的对象

地址:指定数据在内存中的位置

跳转指令:用于把执行点转移到程序另一个位置处继续执行下去

          JMP:无条件跳转:

                    直接跳转:跳转到的目标指令的地址直接写在跳转指令中

                    间接跳转:跳转的目的地址存在于寄存器或内存中

                    条件跳转:使用*作为操作指示符的前缀,该操作符使用movl指令相同的语法

4.      区(节、段、部分):表示一个地址范围

                                  text区、data区、bss区

                                 绝对地址区absolute区  未定义的区undefined区

 

5.      链接器ld涉及的区:text、data、bss、absolute、undefined

                                bss区:用于存储局部公共变量

                                .align:存储对齐命令,用于在当前子区中将计数器的位置设置到下一个指定存储边界处

                                 .ascii “string”:从位置计数器当前位置为字符串分配空间并存储

                                 .asciz “string”:与.ascii相似,每个字符串后自动添加NULL字符

6.      C的嵌入汇编: asm(”汇编语句”

                                   :输出寄存器   (可选)

                                   :输入寄存器   (可选)

                                   :会被修改的寄存器);   (可选)

                      内联函数(inline):提高效率

 

7.      栈:被用来传递函数参数、存储返回信息、临时保存寄存器原有值、存储局部数据

*变量地址压入栈的顺序正好与函数声明的参数顺序相反

在汇编程序调用一个C函数时,程序需要首先按照逆向顺序把函数参数压入栈,

然后CALL执行被调用函数,在函数返回后,程序把先前压入栈的函数参数清除

掉。

 

 

文章来源: blog.csdn.net,作者:冰水比水冰,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/luoyhang003/article/details/24327333

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。