2021-2022-1 20212804《Linux内核原理与分析》第二周作业
2021/10/4 7:11:16
本文主要是介绍2021-2022-1 20212804《Linux内核原理与分析》第二周作业,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一,在Linux环境下安装OpenSSL
OpenSSL 是一个开源项目,其组成主要包括一下三个组件
-
openssl:多用途的命令行工具
-
libcrypto:加密算法库
-
libssl:加密模块应用库,实现了ssl及tls
openssl可以实现:秘钥证书管理、对称加密和非对称加密
安转成功截图如下所示
test_openssl.c代码如下
运行出现错误
具体原因还没有找出,待寻找。
二,通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
编写得C代码如下
编译成的汇编代码
精简后的代码
分析汇编代码
-
程序执行的入口是main函数,先将栈基指针压栈,再将栈基指针指向栈顶,为了保存当前堆栈基址,并开始一个新的栈,每个函数就有独立的栈空间。当函数返回时,能恢复到之前的栈空间。
-
然后将参数压栈。由于堆栈是由高地址向低地址扩充,向下增长的,所以在32位机中入栈是堆栈顶指针减4。
-
调用 call 命令,跳转到函数 f 。call指令等同于pushl %eip,movl f, %eip,将下一条指令入栈后,再将寄存器 eip 的值赋为目标函数 f 的第一条指令地址。这么做是为了当被调用的函数执行结束后,需要返回当前函数继续执行。
-
接着执行函数f,先将栈基指针入栈,再开辟新的一段函数堆栈,subl $4,%esp将栈顶指针向下减4,再调用上一个函数的参数,放入eax中,再入栈。
-
g函数进入过程和f函数类似,leave过程等于movl %ebp,%esp,popl %ebp,等于释放掉这一段函数的调用堆栈。
-
ret等于popl %eip,返回需要执行的下一条指令的位置。
总结
- 计算机通过eip来定位需要执行的下一条指令的位置。
- 堆栈是向下增长,入栈操作esp会先减4,再传值;出栈时先传值,esp再加4。
- 进入或离开一个函数时,会建立或撤销函数调用堆栈。
- 被调用函数执行时,要将当前栈基地址压栈,以便调用结束后能恢复到调用函数栈空间。
- 函数的返回值默认使用eax来返回给上级函数。
- 函数退出时,将 esp 赋值为 ebp,释放当前函数所使用的栈空间。
这篇关于2021-2022-1 20212804《Linux内核原理与分析》第二周作业的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法