博客> 逆向2-CPU&进制
逆向2-CPU&进制
2019-10-22 13:21 评论:0 阅读:340 BellaWong
进制 CPU

app执行过程

 1.png

app包安装在本地磁盘,启动app会将磁盘里的东西装载到内存里(一堆0和1),cpu执行内存中的指令,进行读写操作,最终由CPU调度显示在屏幕上。

cpu如何知道读取的是指令还是数据?

内存有分段管理,有data段、text段等等,可以用MacOView看到

总线

概念

每一个CPU芯片都有许多管脚,这些管脚和总线相连,CPU通过总线跟外部器件进行交互,总线其实就是一根根导线的集合。

总线分类

地址总线:
  • 它的宽度决定了CPU的寻址能力
  • 8086的地址总线宽度是20,所以寻址能力是1M( 2^20)
数据总线:
  • 它的宽度决定了CPU的单次数据传送量,也就是数据传送速度(数据吞吐量)
  • 8086的数据总线宽度是16,所以单次最大传递2个字节的数据
控制总线:

它的宽度决定了CPU对其他器件的控制能力、能有多少种控制 如何对内存的数据进行读操作?

假如对3号单元的数据进行操作:

 2-13.png

  • 地址总线找到3号单元格
  • 读命令由控制总线发给内存条
  • 通过数据总线,将3号单元格的数据08传给CPU

写操作也一个道理

地址总线宽度决定了CPU的寻址能力:

假如cpu只有两根地址总线,两根都通电,那么它的寻址能力就是4。只能寻找0、1、2、3这四个字节的地址,超过3是表达不出来的。

寻址能力决定了能用多大的内存条。 如果cpu的寻址能力为4个G,装一个8G的内存条,那么超过4个G的内存根本拿不到。

以8086为例:

内存地址空间的大小受CPU地址总线宽度的限制

8086的地址总线宽度为20,可以定位2^20个不同的内存单元(内存地址范围0x00000~0xFFFFF),所以8086的内存空间大小为1MB

  • 0x00000~0x9FFFF:主存储器。可读可写
  • 0xA0000~0xBFFFF:向显存中写入数据,这些数据会被显卡输出到显示器。可读可写
  • 0xC0000~0xFFFFF:存储各种硬件\系统信息。只读

 15.png

每个单元格存放的是8个bit位的数据,也就是一个字节

计算机常见数据宽度:

  • 位(Bit): 1个位就是1个二进制位.0或者1
  • 字节(Byte): 1个字节由8个Bit组成(8位).内存中的最小单元Byte.
  • 字(Word): 1个字由2个字节组成(16位),这2个字节分别称为高字节和低字节.
  • 双字(Doubleword): 1个双字由两个字组成(32位)

数据总线:

mark它的宽度决定了CPU的单次数据传送量 我们常数的32位CPU、64位CPU,它有很多的考核标准,其中有一个就是数据总线。 一个数据总线代表一个0和1,8根数据总线代表一次能传1个字节的数据。

32根一次能传递4个字节,64根一次能传递8个字节。

一个指针占8个字节,64位CPU只需要一次通电,32位需要通电两次。

控制总线决定了CPU对其他器件的控制能力,一般软件不用太多关注

  • 一个CPU 的寻址能力为8KB,那么它的地址总线的宽度为 13
  • 8080,8088,80286,80386 的地址总线宽度分别为16根,20根,24根,32根.那么他们的寻址能力分别为多少 64 KB, 1 MB, 16 MB, 4 GB。
  • 8080,8088,8086,80286,80386 的数据总线宽度分别为8根,8根,16根,16根,32根.那么它们一次可以传输的数据为: 1 B, 1 B, 2 B, 2 B, 4 B,
  • 从内存中读取1024字节的数据,8086至少要读 512 次,80386至少要读取 256 次。 在计算机中,数据是有宽度的,超过最大宽度的数据会被丢弃。比如int数据宽度为4个字节, int cTemp = 0x1FFFFFFFF;两个16进制位的数据为一个字节,那么这个int数据 xcode 会提示:Implicit conversion from 'long' to 'int' changes value from 8589934591 to -1

如何查看内存:

断点打在需要查看的int数据处 LLDB命令 p &cTemp 获取内存地址(int *) $0 = 0x000000016dabf90c Debug -> Debug WorkFlow -> View Memory 将步骤2得到的地址粘贴在左下角Address处  2-11.png

在对cTemp进行赋值之后(可以使用ni单步走),对page翻页,再回来,cTemp地址的数据就更新了,就可以看到是FFFFFFFF,没有把1带上,因为超出了范围,写不进去。
 2-12.png

进制:

  • 八进制:由8个符号组成:0 1 2 3 4 5 6 7 逢八进一
  • 十进制:由10个符号组成:0 1 2 3 4 5 6 7 8 9逢十进一
  • N进制:就是由N个符号组成:逢N进一

八进制加法表:  9.png

八进制乘法表: 八进制乘法表  10.png

二进制简写:

  • 二进制: 1 0 1 1 1 0 1 1 1 1 0 0
  • 三个二进制一组: 101 110 111 100 ----> 八进制: 5 6 7 4
  • 四个二进制一组: 1011 1011 1100 ----> 十六进制: b b c
收藏
1
sina weixin mail 回到顶部