12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 297|回复: 0

逆向基础笔记三 通用寄存器和内存读写

[复制链接]

3782

主题

3782

帖子

214748万

积分

超级版主

Rank: 8Rank: 8

积分
2147483647
发表于 2022-1-28 21:59:16 | 显示全部楼层 |阅读模式
继续更新个人的学习笔记,
其它笔记传送门
逆向基础笔记一 进制篇
逆向基础笔记二 数据宽度和逻辑运算
逆向基础笔记四 堆栈篇
逆向基础笔记五 标志寄存器
逆向基础笔记六 汇编跳转和比较指令
逆向基础笔记七 堆栈图(重点)
逆向基础笔记八 反汇编分析C语言
逆向基础笔记九 C语言内联汇编和调用协定
逆向基础笔记十 汇编寻找C程序入口
逆向基础笔记十一 汇编C语言基本类型
逆向基础笔记十二 汇编 全局和局部 变量
逆向基础笔记十三 汇编C语言类型转换
逆向基础笔记十四 汇编嵌套if else
逆向基础笔记十五 汇编比较三种循环
逆向基础笔记十六 汇编一维数组
逆向基础笔记十七 汇编二维数组 位移 乘法
逆向基础笔记十八 汇编 结构体和内存对齐
逆向基础笔记十九 汇编switch比较if else
逆向基础笔记二十 汇编 指针(一)
逆向基础笔记二十一 汇编 指针(二)
逆向基础笔记二十二 汇编 指针(三)
逆向基础笔记二十三 汇编 指针(四)
逆向基础笔记二十四 汇编 指针(五) 系列完结
32位通用寄存器

32位通用寄存器的指定用途如下:
寄存器主要用途编号存储数据的范围EAX累加器00 - 0xFFFFFFFFECX计数10 - 0xFFFFFFFFEDXI/O指针20 - 0xFFFFFFFFEBXDS段的数据指针30 - 0xFFFFFFFFESP堆栈指针40 - 0xFFFFFFFFEBPSS段的数据指针50 - 0xFFFFFFFFESI字符串操作的源指针;SS段的数据指针60 - 0xFFFFFFFFEDI字符串操作的目标指针;ES段的数据指针70 - 0xFFFFFFFF寄存器编号(二进制)编号(十进制)32位16位8位EAXAXAL0000ECXCXCL0011EDXDXDL0102EBXBXBL0113ESPSPAH1004EBPBPCH1015ESISIDH1106EDIDIBH1117
汇编指令

符号含义r寄存器m内存imm立即数r88位通用寄存器m88位内存imm88位立即数MOV指令

MOV 的语法:

  • MOV  r/m8,r8
  • MOV  r/m16,r16
  • MOV  r/m32,r32
  • MOV  r8,r/m8
  • MOV  r16,r/m16
  • MOV  r32,r/m32
  • MOV r8,  imm8
  • MOV r16,  imm16
  • MOV r32,  imm32
MOV 目标操作数,源操作数
作用:拷贝源操作数到目标操作数

  • 源操作数可以是立即数、通用寄存器、段寄存器、或者内存单位
  • 目标操作数可以是通用寄存器、段寄存器或者内存单位
  • 操作数的宽度必须一样
  • 源操作数和目标操作数不能同时为内存单位
ADD指令

ADD 的语法:

  • ADD r/m8,  imm8
  • ADD  r/m16,imm16
  • ADD  r/m32,imm32
  • ADD r/m16,  imm8
  • ADD r/m32,  imm8
  • ADD r/m8,  r8
  • ADD r/m16,  r16
  • ADD r/m32,  r32
  • ADD r8,  r/m8
  • ADD r16,  r/m16
  • ADD r32,  r/m32
ADD 目标操作数,源操作数
作用:将源操作数加到目标操作数上
SUB指令

SUB 的语法:

  • SUB r/m8, imm8
  • SUB r/m16,imm16
  • SUB r/m32,imm32
  • SUB r/m16, imm8
  • SUB r/m32, imm8
  • SUB r/m8, r8
  • SUB r/m16, r16
  • SUB r/m32, r32
  • SUB r8, r/m8
  • SUB r16, r/m16
  • SUB r32, r/m32
SUB 目标操作数,源操作数
作用:将源操作数减到目标操作数上
AND指令

AND 的语法:

  • AND r/m8, imm8
  • AND r/m16,imm16
  • AND r/m32,imm32
  • AND r/m16, imm8
  • AND r/m32, imm8
  • AND r/m8, r8
  • AND r/m16, r16
  • AND r/m32, r32
  • AND r8, r/m8
  • AND r16, r/m16
  • AND r32, r/m32
AND 目标操作数,源操作数
作用:将源操作数与目标操作数与运算后将结果生存到目标操作数中
OR指令

OR 的语法:

  • OR r/m8, imm8
  • OR r/m16,imm16
  • OR r/m32,imm32
  • OR r/m16, imm8
  • OR r/m8, r8
  • OR r/m16, r16
  • OR r/m32, r32
  • OR r8, r/m8
  • OR r16, r/m16
  • OR r32, r/m32
OR 目标操作数,源操作数
作用:将源操作数与目标操作数或运算后将结果生存到目标操作数中
XOR指令

XOR 的语法:

  • XOR r/m8, imm8
  • XOR r/m16,imm16
  • XOR r/m32,imm32
  • XOR r/m16, imm8
  • XOR r/m8, r8
  • XOR r/m32, r32
  • XOR r8, r/m8
  • XOR r16, r/m16
  • XOR r32, r/m32
XOR 目标操作数,源操作数
作用:将源操作数与目标操作数异或运算后将结果生存到目标操作数中
NOT指令

NOT 的语法:
NOT r/m8
NOT r/m16
NOT r/m32
NOT 操作数
作用:取反
LEA指令


lea:Load Effective Address,即装入有效地址的意思,它的操作数就是地址
lea r32,dword ptr  ds:[内存编号(地址)]
将内存地址赋值给32位通用寄存器
lea是传址,mov是传值,注意区别
内存

内存的数量特别庞大,无法每个内存单位都起一个名字,所以用编号来代替,我们称计算机CPU是32位或者64位,主要指的就是内存编号的宽度,而不是寄存器的宽度。
有很多书上说之所以叫32位计算机是因为寄存器的宽度是32位,是禁绝确的,因为还有很多寄存器是大于32位的
通常所说的32位计算机是指CPU字长为32位
计算机内存的每一个字节会有一个编号(即内存编号的单位是字节)
0x000000000x000000010x00000002........................0xFFFFFFFF32位计算机的编号最大是32位,也就是32个1  换成16进制为FFFFFFFF,也就是说,32位计算机内存寻址的最大范围是FFFFFFFF+1
内存的单位是字节,那内存中能存储的信息最多为:FFFFFFFF+1 字节 即4G,这也是为什么我们在一个XP的系统上面如果物理内存超过4G是没故意义的缘故原由
只要是32位的计算机,那么最多识别的内存为4G,对吗?
不对。可以通过打补丁,或者拓展操作系统来,寻址方式是由操作系统决定的
内存格式



  • 每个内存单位的宽度为8
  • [编号]称为地址,用[]来区分立即数和内存地址
  • 地址的作用:当我们想从内存中读取数据或者想向内存中写入数据,首先应该找到要读、写的位置。就像写信要写地址一样。
从指定内存中写入/读取数据

只要是涉及到内存读写的,一定要指定内存的宽度
mov 读/写的数据宽度 ptr ds:[地址],XXXX
例:
mov eax,dword ptr ds:[0x0012FF34]
dword :要读/写多少 此时是32bit  (byte 字节 8bit  word字 16bit  dword双字 32bit)
ds:段寄存器  这里为数据段(后续学习会讲段寄存器)
0x0012FF34 内存编号,必须是32位的,前面的0可以省略
注意:内存编号不要随便写,因为内存是有保护的,并不是所有的内存都可以直接读写(需要特别处理)
寻址公式

寻址公式一:[立即数]

读取内存的值:
MOV EAX,DWORD PTR  DS:[0x13FFC4]
MOV EAX,DWORD PTR  DS:[0x13FFC8]
向内存中写入数据:
MOV DWORD PTR  DS:[0x13FFC4],eax
MOV DWORD PTR  DS:[0x13FFC8],ebx
获取内存编号:
LEA EAX,DWORD PTR  DS:[0X13FFC4]
LEA EAX,DWORD PTR  DS:[ESP+8]
寻址公式二:[寄存器]

reg代表寄存器  可以是8个通用寄存器中的恣意一个
读取内存的值:
MOV ECX,0x13FFD0
MOV EAX,DWORD PTR  DS:[ECX]
向内存中写入数据:
MOV EDX,0x13FFD8
MOV DWORD PTR  DS:[EDX],0x87654321
获取内存编号:
LEA EAX,DWORD PTR DS:[EDX]
寻址公式三:[reg+立即数]

读取内存的值:
MOV ECX,0x13FFD0
MOV EAX,DWORD PTR  DS:[ECX+4]
向内存中写入数据:
MOV EDX,0x13FFD8
MOV DWORD PTR  DS:[EDX+0xC],0x87654321
获取内存编号:
LEA EAX,DWORD PTR DS:[EDX+4]
寻址公式四:[reg+reg*{1,2,4,8}]

读取内存的值:
MOV EAX,13FFC4
MOV ECX,2
MOV EDX,DWORD PTR  DS:[EAX+ECX*4]
向内存中写入数据:
MOV EAX,13FFC4
MOV ECX,2
MOV DWORD PTR  DS:[EAX+ECX*4],87654321
获取内存编号:
LEA EAX,DWORD PTR  DS:[EAX+ECX*4]
寻址公式五:[reg+reg*{1,2,4,8}+立即数]

读取内存的值:
MOV EAX,13FFC4
MOV ECX,2
MOV EDX,DWORD PTR  DS:[EAX+ECX*4+4]
向内存中写入数据:
MOV EAX,13FFC4
MOV ECX,2
MOV DWORD PTR  DS:[EAX+ECX*4+4],87654321
获取内存编号:
LEA EAX,DWORD PTR  DS:[EAX+ECX*4+2]

来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-4-25 15:32 , Processed in 0.609375 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表