一、计算机工作原理
(一)汇编一个简单的C语言程序
(二)分析汇编指令执行过程
main函数:
代码片段 | 含义 |
---|---|
pushl %ebp | EBP寄存器的值压栈 |
movl %esp,%ebp | EBP寄存器指向标号1的位置 |
subl $4,%esp | ESP寄存器向下移动一个标号 |
movl $7, (%esp) | 把立即数7放入ESP寄存器指向的位置 |
call f | EIP寄存器跳转到f函数的位置 |
add $23,%eax | EAX寄存器加立即数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, %esp | ESP寄存器的值加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, %eax | EAX寄存器的值加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 //$ 符号用于表示引用一个变量的值,初学者经常忘记输入
//并不是任何形式的变量名都是可用的,变量名只能是英文字母、
数字或者下划线,且不能以数字作为开头