2022-2023-1 20222804 《Linux内核原理与分析》 第二周作业

一、计算机工作原理

(一)汇编一个简单的C语言程序

在这里插入图片描述

编写的C语言代码

在这里插入图片描述

生成目标文件a.out并查看程序的返回值

在这里插入图片描述

把main.c编译成汇编代码,并查看

在这里插入图片描述
简化main.c的汇编代码

在这里插入图片描述

查看简化后的main.c的汇编代码

(二)分析汇编指令执行过程

main函数:
代码片段含义
pushl %ebpEBP寄存器的值压栈
movl %esp,%ebpEBP寄存器指向标号1的位置
subl $4,%espESP寄存器向下移动一个标号
movl $7, (%esp)把立即数7放入ESP寄存器指向的位置
call fEIP寄存器跳转到f函数的位置
add $23,%eaxEAX寄存器加立即数23
leave撤销main函数的堆栈
ret函数返回
f函数
代码片段含义
pushl %ebp将EBP寄存器的值也即栈底指针压栈
movl %esp, %ebp将ESP寄存器的值也即栈顶指针存入EBP寄存器
pushl 8(%ebp)将EBP寄存器的值加8,指向之前压入栈的数28,然后将28压栈
call g调用g函数
addl $4, %espESP寄存器的值加4,指向调用g函数前的栈顶
leave撤销调用函数的堆栈
ret回退到f函数调用的代码处
g函数
代码片段含义
pushl %ebp将EBP寄存器的值也即栈底指针压栈
movl %esp, %ebp将ESP寄存器的值也即栈顶指针存入EBP寄存器
movl 8(%ebp), %eax将EBP寄存器的值加8,指向之前压入栈的数28,将28存入EAX寄存器
addl $2803, %eaxEAX寄存器的值加2803,即28+2803=2831
popl %ebp将栈顶数据存入EBP寄存器,也即调用g函数前的栈顶指针
ret回退到g函数调用的代码处

二、Linux 目录结构及文件基本操作

(一)新建

1.新建空白文件

使用 touch 命令创建空白文件。

2.新建目录

使用 mkdir(make directories)命令可以创建一个空目录,也可同时指定创建目录的权限属性。
使用 -p 参数,同时创建父目录(如果不存在该父目录)。
在这里插入图片描述若当前目录存在一个 test 文件夹,则 touch 命令,则会更改该文件夹的时间戳而不是新建文件,可mkdir 不会更改时间戳

3.复制

(1)复制文件:

使用 cp 命令(copy)复制一个文件到指定目录。两个地方都有。
在这里插入图片描述

(2)复制目录

要成功复制目录需要加上 -r 或者 -R 参数,表示递归复制,就是说有点“株连九族”的意思。

shiyanlou:~/ $ cp -r father family     //未创建family文件夹           [14:49:33]
shiyanlou:~/ $ ls                                                    [14:49:53]
anaconda3  Code  Desktop  family  father  mydir  test
shiyanlou:~/ $ cd family                                             [14:49:57]
shiyanlou:family/ $ ls                                               [14:50:08]
son                                    //成功但是没有复制father文件夹
shiyanlou:family/ $ cd ..                                            [14:50:10]
shiyanlou:~/ $ rm -r family            //删除family文件夹             [14:50:29]
shiyanlou:~/ $ mkdir family                                          [14:50:35]
shiyanlou:~/ $ cp -r father family                                   [14:50:55]
shiyanlou:~/ $ cd family                                             [14:51:09]
shiyanlou:family/ $ ls                                               [14:51:16]
father                                 //成功但是没有复制father文件夹
shiyanlou:family/ $ 
(3)删除
rm test         //删除一个文件
rm -f test 		  //遇到想要删除一些为只读权限的文件
rm -r family    //删除一个目录
rm -rf family   //遇到权限不足删除不了的目录也可以和删除文件一样加上 -f 参数
(4)移动文件与文件重命名

mv 源目录文件 目的目录
●mv 命令除了能移动文件外,还能给文件重命名。命令格式为 mv 旧的文件名 新的文件名.

(5)查看文件

使用 cat,tac 和 nl 命令查看文件,使用 cat,tac 和 nl 命令查看文件
使用 more 命令打开 passwd 文件
可以使用 Enter 键向下滚动一行,使用 Space 键向下滚动一屏,按下 h 显示帮助,q 退出。

(6)查看文件类型

三、环境变量与文件查找

(一)环境变量

declare tmp				//创建一个变量名为 tmp 的变量
# 正确的赋值
tmp=shiyanlou
# 错误的赋值
tmp = shiyanlou			// = 两边不可以输入空格,否则会报错
echo $tmp				//$ 符号用于表示引用一个变量的值,初学者经常忘记输入
						//并不是任何形式的变量名都是可用的,变量名只能是英文字母、
						  数字或者下划线,且不能以数字作为开头
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值