软件逆向笔记(基础知识)——寄存器

软件逆向基础——寄存器

最近沉迷手游,感觉抽卡出货率太坑,含泪弃之;转战单机游戏,通关一遍后想体验开金手指的快感。别人做的修改器没意思,于是想自己试试。做这个笔记的同时希望也能对对此感兴趣的朋友们有所帮助。

进入正题。

首先是寄存器的分类:

·通用寄存器
·变址寄存器
·指针寄存器
·段寄存器
·指令指针寄存器
·标志寄存器
(一些寄存器可以作为通用寄存器;还有一些不行,比如标志寄存器)

通用寄存器:EAX、EBX、ECX、EDX

·EAX累加器(Accumulator):累加器可用于乘、除、输入/输出等操作,它们的使用频率很高
·EBX基地址寄存器(Base Register):可用来存储指针等内容
·ECX计数寄存器(Count Register):在循环和批量字符串操作时,要用它来控制循环次数
·EDX数据寄存器(Data Register):在进行乘、除运算时,它作为默认的操作数参与运算,也用于存放I/O的端口地址
·补充说明:数据寄存器主要用来保存参与运算的数(操作数)和运算结果等信息

变址寄存器:ESI、EDI

·ESI——源变址寄存器,EDI——目的变址寄存器
·主要用于:存放数据在内存中的偏移量,用来访问存储在内存中的数据,一般与字符串批量操作有关,例如:将内存中的一个字符串复制到内存中的另外一个位置
·可以作为通用寄存器
·在字符串批量处理指令中,ESI用作源字节串地址;EDI用作目的字节串地址,这是有明确定义的,不能搞混

指针寄存器:ESP、EBP

·这两个寄存器与栈相关
·栈被划分为一个个大小不一的栈帧
·ESP栈指针寄存器(extended stack pointer):存放一个指针,该指针永远只想栈最上面一个栈帧的栈顶
·EBP基址指针寄存器(extended base pointer):其内存放一个指针,该指针永远指向栈最上面
一个栈帧的底部

段寄存器:CS、SS、DS、ES、FS、GS

·段寄存器的产生源于Intel 8086 CPU体系结构中数据总线与地址总线的宽度不一致(其原因受制于当时的工艺,数据总线的宽度小于地址总线的的宽度,即单个寄存器所能找到的内存地址范围小于实际的内存地址范围,为了解决这个问题,产生了段寄存器)
·类似固话需要添加区号:用一个寄存器表示访问的区域,另一个寄存器去找具体位置

指令指针寄存器:EIP

·用来存储CPU要读取指令的地址,CPU通过EIP寄存器所指示的位置读取即将要执行的指令。每次CPU执行完响应的汇编指令后,EIP寄存器的值就会自动增加
·EIP是一个很重要的寄存器,它控制了CPU下一步要执行哪一条命令,因此为了计算机的安全,EIP无法通过MOV等指令修改,只能通过JMP、CALL等指令进行修改
·在系统漏洞发掘过程中,要证明一个漏洞可用,基本的方法就是控制EIP使其能够只想自己提供的代码,劫持系统的正常执行流程

标志寄存器:EFLAGS

·主要用于反应处理器的状态和指令运算结果的某些特征
·进位标志(CF):用于反映运算是否产生进位或借位。如果运算结果的最高位产生一个仅为或借位,则CF置1,否则置0
·零标志(ZF):用于判断结果是否为0。运算结果0,ZF置1,否则置0
·溢出标志(OF):反映有符号数加减运算是否溢出。如果运算结果超过了有符号数的表示范围,则OF置1,否则置0

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值