Linux内核学习第1天
内核编程语言和环境1. as86汇编器 语法: as[option] –o objfile srcfile.表示编译过程中的位置计数器Objfile分为三个段(区):正文段(.text):程序的执行代码和只读数据数据段(.data):可读/写的数据未初始化数据段(.bss) 2. GNU as汇编格式:as [option]
内核编程语言和环境
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执行被调用函数,在函数返回后,程序把先前压入栈的函数参数清除
掉。
更多推荐
所有评论(0)