共计 1914 个字符,预计需要花费 5 分钟才能阅读完成。
博客:cbb777.fun
全平台账号: 安妮的心动录
github: https://github.com/anneheartrecord
下文中我说的可能对,也可能不对,鉴于笔者程度无限,请君自辨。有问题欢送大家找我探讨
计算机启动过程
根本围绕着输入输出零碎(Basic Input/Onput System BIOS)开展
1. 开始供电
2.Power On Self Test 检测关键设备是否存在,是否失常运行。如果零碎 BIOS 在这个过程中发现了一些致命谬误,比方内存出错或者没有内存,那就会间接管制喇叭来报告谬误
3.BIOS 抉择启动盘 F12 可进入抉择页面,比方双系统就要这个阶段抉择启动的是哪个操作系统
操作系统启动过程
1. 读取硬盘的前 512 个字节,确定操作系统在磁盘中的地位
2. 将操作系统载入内核中
程序的生成和运行
Java 程序:将源代码通过编译器编译成.class 类型文件(字节码),这种文件只能通过 JVM 辨认。
运行的时候 JVM 从.class 文件中读一行解释执行一行。Java 为了实现跨平台,不同的操作系统对应不同的 JVM,也就是说 Java 前半部分是编译,后半局部是解析,是一种混合型程序
一个 C 程序的编写到运行过程
- 首先应用编辑器编辑程序员文件(.c .cpp)
- 源程序通过编译器被编译为等价的汇编代码,再通过汇编器产生与指标平台 CPU 统一的指标代码,也就是机器码
- 只管指标代码的指令曾经能够被指标 CPU 执行了,然而可能还蕴含没有解析的名称和地址援用,因而须要连接器把指标代码文件和其余的一些库文件及资源文件连接起来,产生可执行的 exe 文件
- 当执行.exe 文件的时候,windows 操作系统会解读链接器记录再可执行程序中的格局信息,而后将代码和数据“搁置”在内存中,称为能够运行的内存映像,而后生成一个过程开始运行
编译过程
编译器(汇编器)所作的工作次要是翻译工作
- 预处理,正式编译之前,通过文件中的预处理指令来批改源文件的内容,包含宏定义指令、条件编译指令、头文件蕴含指令和特殊符号替换指令等等
- 编译和优化,通过词法剖析、语法分析、语义剖析,将其翻译成等价汇编代码,并对其进行优化解决
- 指标代码生成,将两头代码生成合乎以后机器 CPU 的机器码
预处理指令
1. 宏定义指令:#define,这是最常见的用法,能够定义符号常量,函数,重命名等
2. 条件编译指令:#if #ifndef #ifdef #elif 等等,次要进行编译时有抉择的一些代码,比方 #ifdef 如果宏曾经定义,则编译上面代码
3. 头文件蕴含品质:#inlcude 是一种最为常见的预处理,次要是作为文件的援用组合源程序注释
4. 特殊符号解决:能够辨认一些非凡的符号,预编译程序对于在源程序中呈现的这些串将用适合的值进行替换
程序的链接
链接器的基本功能是:将编译器产生的多个指标文件合称为一个能够在指标平台下那个的文件,这里说的指标平台指的是程序的运行环境,CPU 和操作系统等
链接器依照工作模式分为动态链接和动静链接两类
1. 动态链接 链接器将函数的代码从其所在地(指标文件或者动态链接库)复制到最终的可执行程序中,整个过程在程序生成的时候实现,动态链接库实际上是一个指标文件的汇合,其中的每个文件含有库中的一个或者一组相干函数的代码,动态链接则是将相干代码复制到源代码相干地位,参加程序的生成
2. 动静链接 动态链接库在编译链接的时候只提供符号表和其余大量信息,用于保障所有符号援用都有定义,保障编译顺利通过。程序执行的时候动态链接库的全部内容将被映射到内存中,依据可执行程序中的信息找到相应的函数地址并调用执行
逆向剖析
逆向就是在不能轻易取得必要的生产信息下,间接对成品的剖析动手,推导出产品的设计原理,次要分为硬件和软件两大部分
动态分析
将一个指标代码变换为易读模式的过程,个别是在调试器或者工具中加载程序,而后一边运行程序一边对程序的行为进行察看和剖析,这些调试器或者调试工作包含:IDE,驰名工具 OllyDbg 等等
毛病:
- 重大依赖输出
- 可能因为环境起因,无奈运行目标程序
动态剖析
不执行代码,而是通过反汇编、反编译等工具,将程序的二进制代码翻译成汇编语言,之后再进行剖析。常用工具有 IDA Pro,C32Asm 等等
毛病
- 程序加壳之后无奈反汇编
- 代码混同甚至于被加密解决
软件逆向的个别过程
- 文件装载进行与指标文件相干的一些初步剖析,包含文件格式解析、文件信息收集和文件性质断定,剖析出文件执行入口地址,初步剖析文件的数据段和代码段以及文件运行所以来的其余文件信息
- 指令解码指令解析,将指令机器码影视各位成为汇编语言
- 语义映射通过间接代码实现或者工具实现
- 相干图结构
- 过程剖析
- 类型剖析
- 后果输入后果输入时逆向剖析的最终阶段
本文由 mdnice 多平台公布