+ +

二进制基础

寄存器、缓存、内存、硬盘的相关知识,以及栈和栈帧平衡,对swap函数用F10调试,用栈分析其过程

寄存器

直接整合到CPU中的有限的高速访问速度的存储器,但是容量有限,所以一般只存储一些指令和使用频繁的数据,加快直接同内存读取指令和读写数据的速度。

缓存

数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。

内存

与CPU进行沟通的桥梁,计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。 内存是由内存芯片、电路板、金手指等部分组成的。

硬盘

用来存储需要永久存储的文件。


CPU访问速度从快到慢排序为:

寄存器->缓存->内存->硬盘

寄存器寻址

参照汇编语言

小端序

高位字节存储在高位,低位字节存储在低位

数据在内存中一般以16进制储存,一个字节可以储存8个二进制位,一个16进制可以表示4个二进制位,所以一个字节可以存储2个16进制位,a在十六进制中表示十进制中的10,0-f均表示一个16进制位。

例如:① Char [4] “pwn”
Ascii ‘p’=70 ‘w’=77 ‘n’=6e(已经是16进制数了)

一个字节存储一个字符,所以不需要用到小端序,其在内存中的存储为:70、77、6e、00,00为\0的16进制数。

② int 0x1234 一个整型的可以存4个字节,此时需要对其进行排序,小端序排序,未排序之前是12,34;排序后高字节12排在高位置上,即右边,所以排序后,其存储形式应为:34,12。

栈和SWAP

一、栈的特点:
1、先进后出

2、地址从高位到低位延伸,先进的在高地址,push栈的底部会下降,pop底部会上升



这里上下两幅图都是可以表示栈的,由于栈的特性,我们只需要记住,栈底的地址较高,栈顶的地址较低即可



二、栈的作用:
1、暂时保存变量 //寄存器个数有限,运行函数需要寄存器,用栈保存省寄存器

2、调用函数时传递参数(与接下来的SWAP连接在一起)

3、保存函数返回地址 //调用函数,函数结束返回你调用的位置之后,利用了栈的先进后出的特点,即先调用的后返回

三、SWAP

a、b指要交换的两个数,aa为a的地址,bb为b的地址,*aa=a, *bb=b

1、可以被交换



分析过程:


SWAP函数将aa地址对应的值与bb地址对应的值交换,结果为:



主函数中a,b得值被交换,刚开始一直很迷,因为一直在用a,b进行入栈分析操作,所以觉得没变,事实上,a,b指示变量的名称。