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

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


 

作者:20135304 刘世鹏

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

实验过程

写入c语言代码

 

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

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

分析过程

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

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

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


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

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


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

 

 

 


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


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


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


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

 

实验体会

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

posted @ 2016-02-24 22:42  刘世鹏  阅读(10488)  评论(2编辑  收藏  举报