第4章:IA-32寄存器
Intel x86系列的CPU采用的是小端序,RISC系列的CPU采用采用的是大端序
小端序方便计算,大端序方便表示
记住下面的寄存器名字:
EAX :(针对操作数和结果数据的)累加器 Accumulation,或用在函数返回值中
EBX:(DS段中的数据指针)基址寄存器
ECX:(字符串和循环操作中的)计数器
EDX:(I/O指针)数据寄存器
上面四个寄存器主要用在算术运算中.
EBP:(SS段中栈内数据指针)扩展基址指针寄存器 Base Pointer,栈区域的基地址,用于暂时保存ESP的值,这叫栈帧(Stack Frame)技术
ESI:(字符串操作源指针)源变址寄存器 Source
EDI:(字符串目标指针)目的变址寄存器 Destination
ESP:(SS段中栈指针)栈指针寄存器 Stack Segment
在IA-32的保护模式中,段是一种内存保护技术,段内存记录在SDT(Segment Descriptor Table,段描述符表)中,段寄存器就持有SDT的索引值
段寄存器的名称如下:
CS:Code Segment ,代码段寄存器,即放应用程序代码所在段的段基址
SS:Stack Segment ,栈段寄存器,放栈段的段基址
DS:Data Segment ,数据段寄存器,数据段的段基址
ES:Extra(data) Segment ,附加数据段寄存器,附加数据段的段基址
FS,GS:同 ES
FS寄存器在高级调试中会使用到,它用于计算SEH(Structured Exception Handler)结构化异常处理,TEB(Thread Environment Block)线程环境块,PEB(Process Environment Block)进程环境块等地址
Eflags,标志寄存器:
OF(Over Flow)标志位:有符号整数溢出时或最高有效位MSB(Most Significant Bit),即化为二进制后最高的那一位,改变时都会置为1.
CF(carrier Flag):无符号整数溢出时,置为1
EIP寄存器:CPU下一个将要执行的指令,不能直接改变,只能通过其它指令jmp,call等或者中断or异常来修改EIP的值