6、汇编和可执行文件(需要重新看视频整理)

汇编≈机器码

编译器将源代码转换成汇编码(机器码)

代码经过编译器编译形成与之对应的汇编代码,而这些汇编代码不是可执行的,它需要链接(Link),而编写代码的时候我们需要使用很多API,而这些API有90%的API并不是我们自己写的,也就是说我们并没有与之对应的汇编代码,每个操作系统都有不同的API,所以我们要使用API,就需要链接,这个过程我们就叫链接(Link)

我们做的代码编译后会生成一个obj文件,也就是我们代码转换的汇编代码。它不能被执行,因为他不符合操作系统本身的规则,而让他符合操作系统要求的过程就是Link的过程

我们在编译的时候有可能会生成不一样的代码,因为我们的编译器会来进行一些优化

汇编代码:

赋值语句

跳转语句

计算语句

反汇编中:ebp,esp都是寄存器的名称,分别都是栈寄存器,栈寄存器能够很好地来做一些记录

调试的时候建议使用Debug,它会对你的每句代码生成对应的汇编

Release称为发布版,要求快速,精悍

为什么做的最精简的代码也有8.5K?因为链接了很多东西在里面,导致我们当前生成的所有文件会很大

当文件大小是8.5K,而占用空间为12K,为什么?因为是簇的原因,硬盘分为一个个的簇来存储文件

程序里面的任何东西都要占用内存,临时变量所占用的内存,我们叫它栈

栈溢出:有时候写一个数组,这里面超过了1024KB大小,栈默认大小是1024KB,解决方法,把他放堆上运行就可以了,栈用来存储临时变量,零食变量是需要占用内存,每一次所占的内存需要释放掉


栈溢出:Stack是栈,overflow是溢出

栈不仅仅只是存储临时变量,还有跳转后返回地址(每一次调用函数的时候)

push是入栈,POP是出栈

ebp是栈底,esp是栈顶,eip是程序计数器,EFL是标志寄宿器,(eas叫做累加寄存器,EDI是源寄存器,ESI是基址寄存器)一般我们把上面括号里面的寄存器当做通用寄存器使用,有时候还会把EBP当通用寄存器使用

程序分为四个大块,分别是代码,栈,常量,堆

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容