计算机是如何工作的———高级语言转变为机器语言的过程(20135304 刘世鹏)...

计算机是如何工作的———高级语言转变为机器语言的过程


 

作者:20135304 刘世鹏

《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”

实验过程

写入c语言代码

计算机是如何工作的———高级语言转变为机器语言的过程(20135304 刘世鹏)..._第1张图片

 

执行gcc -S -o main.s main.c -m32指令后得到汇编代码

计算机是如何工作的———高级语言转变为机器语言的过程(20135304 刘世鹏)..._第2张图片

删除以“.”开头的附加项后得到纯净的汇编代码

计算机是如何工作的———高级语言转变为机器语言的过程(20135304 刘世鹏)..._第3张图片

分析过程

得到纯净的汇编代码之后对其工作过程进行分析

前几步较为简单,ebp和esp所指向数值的箭头颜色与右边代码外框的颜色对应

值得强调的是在main函数执行到“call f”指令后,eip指向“f函数”,代码的执行进入f函数,

计算机是如何工作的———高级语言转变为机器语言的过程(20135304 刘世鹏)..._第4张图片


在f函数中,eax计算器存储“5304”这一数值

计算机是如何工作的———高级语言转变为机器语言的过程(20135304 刘世鹏)..._第5张图片

“call g ”指令将eip指向“g 函数”,开始执行g函数的指令。
在g函数中,eax修改5307为存储值

计算机是如何工作的———高级语言转变为机器语言的过程(20135304 刘世鹏)..._第6张图片


pop %ebp指令将ebp指向4,esp上移一位

计算机是如何工作的———高级语言转变为机器语言的过程(20135304 刘世鹏)..._第7张图片

 

 

 


计算机是如何工作的———高级语言转变为机器语言的过程(20135304 刘世鹏)..._第8张图片

ret指令退出“g函数”,进入离开“f函数”的位置,esp上移一位


计算机是如何工作的———高级语言转变为机器语言的过程(20135304 刘世鹏)..._第9张图片

执行f函数的leave指令,将ebp的值赋值给esp,随后将ebp的值指向1,随后esp上移一位


计算机是如何工作的———高级语言转变为机器语言的过程(20135304 刘世鹏)..._第10张图片

退出f函数,执行离开main函数后的代码,修改eax为5308


计算机是如何工作的———高级语言转变为机器语言的过程(20135304 刘世鹏)..._第11张图片

继续执行leave和ret指令,使得esp和ebp最后恢复初始状态。整个过程结束。

 

实验体会

在上学习信息安全系统中的“缓冲区溢出”实验中对汇编代码的执行过程已有了初步了解,经过这学期的课程,让我对以前感到模糊的概念有了清晰的认识,课程视频时间虽然不长,但讲解的很透彻,让我们学会汇编代码工作的核心思想。对计算机的工作原理有了更深的认识。可能是之前汇编学习不够扎实,在视频分析过程中没能一次理解的知识点就反复看视频理清思路,最终学有所得。

转载于:https://www.cnblogs.com/L20135304/p/5215409.html

你可能感兴趣的:(c/c++,操作系统)