当前位置: 首页 > 科技观察

网络安全编程:x86汇编语言寄存器

时间:2023-03-21 00:25:24 科技观察

任何程序的执行,归根结底都是内存中存储的指令序列的执行结果。寄存器用于存储程序运行过程中的各种信息,包括操作数地址、操作数、操作的中间结果等。让我们熟悉一下各种寄存器。1、CPU工作模式x86系统的CPU有两种基本的工作模式,分别是实模式和保护模式。实模式,也称为实地址模式,实现了Intel8086处理器的编程环境。早期的Win9x和DOS支持这种模式。实模式下可以访问的内存为1MB。实模式可以直接访问硬件,比如直接操作端口和中断。现在的CPU还是支持实模式的,一是为了保持与早期CPU架构的兼容性,二是因为所有x86架构的处理器都是从实模式启动的。保护模式是处理器的主要工作模式,Linux和WindowsNT内核系统都工作在x86保护模式下。在保护模式下,每个进程可以访问的内存地址为4GB,进程之间是隔离的。2.基本寄存器寄存器是CPU内部的高速存储单元。存取速度比内存快很多,价格也高很多(按单价计算,寄存器的价格比内存贵,内存比硬盘贵)。在CPU中,常用的寄存器分为4类,即8个通用寄存器、6个段寄存器、1个标志寄存器和1个指令指针寄存器,如图1所示。图1x86处理器的基本寄存器(1)通用寄存器通用寄存器主要用于各种运算和数据传输,每个寄存器可以作为32位、16位或8位,如图2所示。图2Schematicdiagramofgeneral-purposeregisters(1)对于图2,一个寄存器可以分别作为8位、16位或32位使用。EAX寄存器可以存储32位数据。EAX的低16位可以表示为AX,可以存放16位数据。AX寄存器可以分为两个8位寄存器,AH和AL,AH对应AX寄存器的高8位,AL对应AX寄存器的低8位。这种方式只能使用数据存储寄存器。从图1可以看出,有4个数据存储寄存器,EAX、EBX、ECX和EDX。(2)如何使用通用寄存器和专用指针变址寄存器可以按照32位或16位使用,如图3所示。图3通用寄存器示意图(2)对于图3,只有一个寄存器可以分为32位或16位使用。ESI寄存器可以存放一个32位的指针,其中低16位可以表示为SI,存放一个16位的指针,但不能像AX一样分为高8位和低8位。每个通用寄存器的使用方式如图1所示。4.图4通用寄存器的使用方式通用寄存器中的一些寄存器有特殊用途:①EAX自动用于乘法和除法指令;②CPU自动使用ECX作为循环计数器;③ESP寻址栈(准确的说,应该是栈,其实“堆”就是“堆”,“堆”就是“栈”,就像“刀”一样虽然一起叫,但其实是两种不同的武器),ESP寄存器一般不参与计算运算,通常称为栈指针寄存器;④ESI和EDI通常用于内存数据的高速传输,称为源指针寄存器和目的指针寄存器;⑤EBP是高级语言用来引用参数和局部变量的,通常称为Stackframebasepointerregister。(3)指令指针寄存器指令指针寄存器EIP是一个32位的寄存器。在16位环境中,它的名字是IP。EIP寄存器通常保存下一条要执行的指令的地址。下一条指令的地址是当前指令的地址加上当前指令的长度。特殊(notusuallyandspecial)情况是当前指令为转移指令,如JMP、JE、LOOP等指令,会改变EIP的值,导致CPU执行指令跳转,从而形成一个分支和循环。程序结构。EIP中的值一直在指导CPU的执行。(4)段寄存器段寄存器用于存放段的基地址,是一块预先分配的内存区域。有的段存放程序指令,有的存放程序变量,还有一些段,如堆栈段,存??放函数变量和函数参数。在一个16位的CPU中,只有4个段寄存器,分别是CS(代码段)、DS(数据段)、SS(堆栈段)和ES(额外段)。在32位CPU中,段寄存器由4个扩展为6个,即CS、DS、SS、ES、FS、GS。FS和GS段寄存器也属于附加段寄存器。(5)标志寄存器在16位CPU中,标志寄存器称为FLAGS(有的书上是PSW,即程序状态字寄存器)。在32位CPU中,标志寄存器也扩展为32位,称为EFLAGS。关于标志寄存器,16位CPU中的标志已经可以满足日常编程了。这里主要介绍16位CPU中的flags。标志寄存器如图5所示。图516位标志寄存器图5显示标志寄存器中每个标志位只占1位,16位标志寄存器并没有全部使用。16位标志寄存器分为两部分,条件标志和控制标志。条件标志寄存器如下所述。①OF(OverflowFlag):溢出标志,溢出时为1,否则为0。②SF(SignFlag):符号标志,运算结果为负时为1,否则为0。③ZF(ZeroFlag):零标志,运算结果为0时为1,否则为0。④(AuxiliarycarryFlag):辅助进位标志,记录运算过程中第3位(半字节)产生的进位。有进位时为1,否则为0。⑤(ParityFlag):奇偶校验标志,当结果操作数中1的个数为偶数时为1,否则为0。⑥CF(CarryFlag):进位标志,有进位时为1,否则为0。下面介绍控制标志寄存器。①DF(DirectionFlag):方向标志,用于控制字符串处理指令中的方向。②IF(InterruptFlag):中断标志。③TF(TrapFlag):陷阱标志。在日常使用中,比较常用的标志有CF、PF、ZF、SF、DF和OF。16位CPU中的flags在32位CPU中继续使用,32位又扩展了4个新的flag位。

猜你喜欢