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

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

作者: 无力吐槽果 | 来源:发表于2016-10-18 20:02 被阅读0次

汇编≈机器码

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

代码经过编译器编译形成与之对应的汇编代码,而这些汇编代码不是可执行的,它需要链接(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当通用寄存器使用

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

相关文章

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

    汇编≈机器码 编译器将源代码转换成汇编码(机器码) 代码经过编译器编译形成与之对应的汇编代码,而这些汇编代码不是可...

  • iOS碎片随笔

    Runtime: 众所周知,高级语言想要成为可执行文件,需要先编译为汇编语言 -> 再汇编为机器语言,机器语言也就...

  • ELF 文件结构及静态链接

    简介 C/C++ 代码在变成可执行文件之前需要经历预处理、编译、汇编以及链接这几个步骤,最终生成的可执行文件包含了...

  • Runtime底层学习

    Objective-C作为一门高级编程语言,想要成为可执行文件需要先编译成汇编语言,在汇编成机器语言,机器语言也是...

  • RunTime

    一、引言 总所周知,高级语言想要成为可执行文件需要 先编译为汇编语言 -> 再汇编为机器语言,机器语言也就是计算机...

  • 代码的编译过程

    预处理 编译生成汇编代码 源码->汇编 汇编生成目标文件 链接各种库才能产生最终的正确可执行文件 编译的过程 假如...

  • Swift 与 Objective-C to 机器语言

    高级语言想要成为可执行文件需要 先编译为汇编语言 -> 再汇编为机器语言,机器语言也就是计算机能够识别的唯一语言。...

  • 06_函数调用过程(计算机科学)

    汇编和可执行文件 前面我们已经知道,汇编约等于机器码。源代码通过编译器(也是一个软件)进行编译,得到机器码。以后我...

  • 可执行文件

    一个可执行文件的生成一般都要经过下面几个步骤:编辑 、预处理 、 编译、优化、汇编 、 连接 ——>可执行文件...

  • [读书笔记]程序员的自我修养--静态链接

    1、编译过程 预处理(预编译 .i)—> 编译(.s) —> 汇编(.o) —> 链接(可执行文件 .a ...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/avkzyttx.html