初学者的逆向工程-第一章 CPU概论


CPU概论:


CPU是所有程序赖以执行的部件。
基本术语:
指令(instuction):CPU提供的原始命令。最简单的例子:
在寄存器间转移数据,操作内存,算数命令等。通常来说,
每个CPU都有自己的指令集架构(ISA)。
机器码(machine code):CPU能够执行的代码。每个指令通常有几个
字节编码。
汇编语言(assembly code):助记符和一些宏扩展,能够使程序员易于编程。
CPU寄存器(register):每个CPU有一个通用寄存器(GPR)集.x86中有8个,X86-64有16个,ARM中是16个。
理解寄存器的最好方式是将其看成是无类型的临时变量。可以联想到高级语言但你只有8个(或是)16个32位
或是64位的变量。尽管寄存器数量少,但许多事依然能够完成了。
那么机器码和编程语言之间有什么区别呢?使用诸如C,C++,Java,Python等高级语言更容易被人理解,但
低级别的抽象语言更利于CPU理解。也许可以发明一种计算机能够直接执行高级编程语言的代码,但是那也会相当复杂。
正相反,由于汇编语言的的低级使得人理解起来就不方便。并且,很难做到编写代码过程中不出现
恼人的错误。将高级语言转换成汇编语言的程序是编译器。


1.1 闲谈x86和ARM



 x86是指令的长度可变的指令集架构,随着64位时代的来临,扩展的x64对ISA没有太大的影响。
 x86有许多指令出自16位的8080CPU,并且仍然在后续的CPU中出现。
 ARM是指令长度固定不变的精简指令集实现的CPU,这使得其拥有许多的优势。在早期,
 ARM所有的指令都以4字节编码,这被称为“ARM模式”。
 然而这被认为是不节俭的。事实上,现实世界中的运用程序CPU用得最多的几个指令能够以较少的数量的编码。
 所以引入了另一个Thumb指令集,每条指令只是以2字节编码,被称为“Thumb 模式”。但不是所有的指令都以2字节
 编码,所以Thumb指令集从某种程度来说是受限的。由ARM模式和Thumb模式编译的代码当然能够在同一个
 程序中共存。
 接着ARM的创造者们认为Thumb指令集能够扩展:于是Thumb-2出现了( ARMv7指令集)。Thumb-2有两字节的
 指令,但一些新的指令是四字节的。有一种错误的观念认为thumb-2是ARM和Thumb混合的,这是不正确的。
 然而,thumb-2扩展到能够完全支持处理器特性使得其能够与ARM竞争。在如此多的指令集中,Thumb-2能够与
 原始的ARM一较高下。大多数的iPod/iPhone/iPad运用被Xcode编译成Thumb-2指令集。
 

 接着64位的ARM来临,这个ISA由4字节编码,没有额外的Thumb模式。但是64位的需求影响了ISA。

所以,总结来说,我们有3种ARM指令集:ARM模式,Thumb模式(包括 Thumb-2),以及ARM64。这些指令集有交叉的部分,

但我要说的 是,这几种ISA都各有不同。因此,在本书中将会把3种ARM指令的代码添加进来。

 
 
 











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值