汇编≈机器码
编译器将源代码转换成汇编码(机器码)
代码经过编译器编译形成与之对应的汇编代码,而这些汇编代码不是可执行的,它需要链接(Link),而编写代码的时候我们需要使用很多API,而这些API有90%的API并不是我们自己写的,也就是说我们并没有与之对应的汇编代码,每个操作系统都有不同的API,所以我们要使用API,就需要链接,这个过程我们就叫链接(Link)
我们做的代码编译后会生成一个obj文件,也就是我们代码转换的汇编代码。它不能被执行,因为他不符合操作系统本身的规则,而让他符合操作系统要求的过程就是Link的过程
我们在编译的时候有可能会生成不一样的代码,因为我们的编译器会来进行一些优化
汇编代码:
赋值语句
跳转语句
计算语句
反汇编中:ebp,esp都是寄存器的名称,分别都是栈寄存器,栈寄存器能够很好地来做一些记录
调试的时候建议使用Debug,它会对你的每句代码生成对应的汇编
Release称为发布版,要求快速,精悍
为什么做的最精简的代码也有8.5K?因为链接了很多东西在里面,导致我们当前生成的所有文件会很大
当文件大小是8.5K,而占用空间为12K,为什么?因为是簇的原因,硬盘分为一个个的簇来存储文件
程序里面的任何东西都要占用内存,临时变量所占用的内存,我们叫它栈
栈溢出:有时候写一个数组,这里面超过了1024KB大小,栈默认大小是1024KB,解决方法,把他放堆上运行就可以了,栈用来存储临时变量,零食变量是需要占用内存,每一次所占的内存需要释放掉

栈不仅仅只是存储临时变量,还有跳转后返回地址(每一次调用函数的时候)
push是入栈,POP是出栈
ebp是栈底,esp是栈顶,eip是程序计数器,EFL是标志寄宿器,(eas叫做累加寄存器,EDI是源寄存器,ESI是基址寄存器)一般我们把上面括号里面的寄存器当做通用寄存器使用,有时候还会把EBP当通用寄存器使用
程序分为四个大块,分别是代码,栈,常量,堆
网友评论