目录

  • 一、内存中的数据
    • 1、存储方式
    • 2、可识别寻址方式
  • 二、堆栈
    • 1、基本原理
    • 2、堆栈指令
      • push
      • pop
      • pushad与popad
  • 三、标志寄存器
    • 1、寄存器位置
    • 2、标志的意义
  • 四、指令
    • ADC
    • SBB
    • XCHG
    • MOVS
    • STOS
    • REP
    • JMP
    • CALL&RETN
    • CMP
    • TEST
  • 五、JCC

一、内存中的数据

1、存储方式

数据存储在内存中是以字节的单位反向存储的,如:4B5C6D3A,在内存中存储顺序是3A 6D 5C 4B(两个十六进制数为一个字节)。

2、可识别寻址方式

1、立即数
mov eax,dword ptr ds:[0xAAAA] (读取)
mov dword ptr ds:[0xAAAA],eax (写入)
lea eax,dword ptr ds:[0xAAAA] (读取地址)
lea:得到地址的指令

2、[reg]
mov ea,dword ptr ds:[ecx] (读取)
mov dword ptr ds:[ecx],eax (写入)
lea eax,dword ptr ds:[ecx] (读取地址)
注:eax中存着一个代表地址的数

3、[reg+立即数]
4、[reg+reg*{1\2\4\8}]
5、[reg+reg*{1\2\4\8}+立即数]

二、堆栈

1、基本原理

建立堆栈如图

堆栈是用两个寄存器标记出一段内存用于存储数据(一个标记栈底一个标记栈顶),使用堆栈的目的是:1数据大寄存器存不下 2需要寻址方便

寻址方式:从堆栈顶寄存器或者底寄存器±个数得出所需地址数。(这种±就是平时所说的偏移)

弹出数据(删除):只需将顶(底)偏移想要删除的内存个数即可。

2、堆栈指令

注:系统默认EBP为栈底,ESP为栈顶。

push

栈顶向上移并赋值,[x]赋值给新开的内存空间。
格式:push [x]([x]为立即数\寄存器\内存地址)

pop

弹出栈内的值并自动下移,弹出的值赋值给[y]。
格式;pop [y]([y]为寄存器\内存地址)

注:以上两个指令中不允许使用8位寄存器\内存地址,如果使用的是16位的内存或寄存器那么栈顶只会偏移两个字节。

pushad与popad

这两个指令称为堆栈平衡指令
pushad是保存当前堆栈(包括所有寄存器中的值也保存),pop是回复pushad保存的堆栈。
作用:在调试过程出错后起“回档”作用。

三、标志寄存器

1、寄存器位置

2、标志的意义

注:mov指令不改变寄存器。

CF:判断最高位是否溢出(借位\进位),无变化为零。(根据无符号数)
PF:判断运算结果中“1”个数的奇偶性,奇0偶1。(只看最后两个字节)
AF:判断辅助位是否进位,无变化为0。(辅助位FFFFFFFF,FFFF,FF
ZF:判断结果是否为0,运算结果为零则为1。
SF:判断符号位(最高位),与结果最高位相同。
OF:判断是否溢出,溢出则为1。(根据有符号数)
DF:方向标志位,决定方向。0为加,1为减。

CF与OF主要取决于观测者,需要哪个看哪个。

四、指令

ADC

带进位的加法,计算结果时会加上CF的值。
格式:acd r\m,r\m\i

SBB

带借位的减法,计算时会再减去CF的值。
格式:sbb r\m,r\m\i

XCHG

交换数据,只能容器到容器。
格式:xchg r\m,r\m

MOVS

移动数据,内存到内存.
格式:
movs byte ptr es:[edi],byte ptr es:[esi]简称movsb
movs word ptr es:[edi],word ptr es:[esi]简称movsw
movs dword ptr es:[edi],dword ptr es:[esi]简称movsd
把[esi]中的移到[edi]中,并根据移动字节数改变esi和edi的值。

STOS

将al\ax\eax的值存储到[edi]指定的内存单元。
格式:
stos byte ptr es:[edi] 简写stosb
stos word ptr es:[edi] 简写stosw
stos dword ptr es:[edi] 简写stosd
至于是al\ax\eax中的哪一个则根据宽度来判断。

REP

根据ecx的值决定重复执行后面代码的次数。
格式:rep movsw等。

JMP

给eip赋值,且不影响其他值(堆栈,寄存器等)
格式:jmp r\i

CALL&RETN

同样是给eip赋值,不同的是他会将下一行指令的地址记录下来压入堆栈中,跳转后执行到retn时会回到记录的代码地址。
格式:call r\i

CMP

原理和sub相同,不同于它不是真正的减去(不会影响存的数据),只会改变标志寄存器。常用来比较是否相等。(cmp eax,ecx)
格式:cmp r\m,r\m\i

TEST

原理和and相同,机制和cmp相同,不改变实际值。常用来判断寄存器的值是否是零。(test eax,eax)
格式:test r\m,r\m\i

五、JCC

注:与jmp实质相同

1、JE\JZ 结果为零跳转(ZF=1)
2、JNE\JNZ 结果不为零跳转(ZF=0)

3、JS 结果为负跳转(SF=1)
4、JNS 结果为非负跳转(SF=0)

5、JP\JPE 结果中1为偶数个跳转(PF=1)
6、JNP\JPO 结果中1为奇数个跳转(PF=0)

7、JO 结果溢出跳转(OF=1)
8、JNO 结果不溢出跳转(OF=0)

无符号数:
9、JB\JNAE 结果溢出跳转(CF=1)
10、JNB\JAE 结果不溢出跳转(CF=0)

11、JBE\JN 小于等于跳转(ZF=1 or ZF=1)
12、JNBE\JA 大于跳转(ZF=0 and ZF=0)

有符号数:
13、JL\JNGE 小于跳转(SF!=OF)
14、JNL\JGE 大于等于跳转(SF=OF)

15、JLE\JNG 小于等于跳转(ZF=1 or SF!=OF)
16、JNLE\JG 大于跳转(ZF=0 and SF=OF)

滴水逆向学习总结第二期相关推荐

  1. 滴水逆向学习笔记 -1-

    目录 一.进制 N进制的定义 二.数据宽度_逻辑运算 数据宽度 逻辑运算 三.通用寄存器_内存读写 寄存器 内存 四.内存地址_堆栈 内存地址 堆栈 五.标志寄存器 举案例引知识 标志寄存器 相关指令 ...

  2. 滴水逆向学习总结第一期

    目录 一.进制 二.逻辑运算 1."与""或"'异或' 2.原码反码补码 3.加减乘除 三.寄存器 1.汇编指令 2.24种通用寄存器 3.寄存器与内存 一.进 ...

  3. 滴水逆向学习笔记 -2-

    目录 堆栈图(2) 相关概念 堆栈图 C语言 堆栈图(2) 相关概念 函数: 计算机中的函数是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能的同时还带有一个入口和一个出口,所谓的入 ...

  4. 滴水逆向win32学习笔记1

    滴水逆向win32学习笔记 一.字符编码 基本介绍 关于utf-16.utf-8和unicode的关系 BOM头 二.宽字符 基本介绍 常用函数 三.Win32 API中的宽字符 什么是win32 A ...

  5. 滴水逆向4月16日学习

    滴水逆向 进制 1>.进制的定义: 十进制的定义:由十个符号组成,分别是0,1,2,3,4,5,6,7,8,9,逢十进一. 八进制的定义:由八个符号组成,分别是0,1,2,3,4,5,6,7,逢 ...

  6. b站滴水逆向课后练习(入伍停更中)

    B站滴水逆向,想学习逆向知识的一起学习吧! 评论区有热心网友提供了全部课件,真心非常感谢! 提取链接:https://pan.baidu.com/s/1YwUP9I7Vctqiq1sOW9feBA 提 ...

  7. 静态链接库,动态链接库【滴水逆向三期48笔记】

    在开发过程中,我们通常会有很多函数,需要多次使用或在不同的程序中使用该函数,也有可能我们会将我们写好的函数给别人使用,但是我们又不想给他源代码,毕竟代码是我们花了很多功夫写出来的,那么我们如何不发给其 ...

  8. c++ vector 一部分_C++逆向学习(二) vector

    此文为原创文章 作者:ret2nullptr@先知社区 恭喜作者获得 价值100元的天猫超市享淘卡一张 欢迎更多优质原创.翻译作者加入 ASRC文章奖励计划 欢迎多多投稿到先知社区 每天一篇优质技术好 ...

  9. sqlrowset 转化为json_逆向学习 fastjson 反序列化始末

    作者:summersec 本文为作者投稿,Seebug Paper 期待你的分享,凡经采用即有礼品相送! 投稿邮箱:paper@seebug.org 前言 Fastjson这款国内知名的解析json的 ...

最新文章

  1. 如何具体学习计算机视觉
  2. 独家 | 一文带你熟悉贝叶斯统计
  3. 8、Python与设计模式--门面模式
  4. python协程详解_对Python协程之异步同步的区别详解
  5. python xlwt写入excel_python xlwt模块写入excel超过65536行报错问题解决方法
  6. ALEX net 解读
  7. JQUERY的location.href.split
  8. php memcached mysql_PHP Memcached使用详解
  9. mysql函数封装_PHP访问MYSQL数据库封装类(附函数说明)
  10. php 完美防sql注入,PHP 完美的防XSS 防SQL注入的代码
  11. 电脑开机进不了桌面拒绝访问怎么办
  12. integer是值传递还是引用传递_188W+程序员都关注的问题:Java到底是值传递还是引用传递?
  13. 【Sublime Text3 】——代码片段
  14. 【中国传媒大学】史上最全的《电视原理》笔记
  15. android mds文件,安卓手机如何打开.mdf文件
  16. WebView如何引用本地字体
  17. mysql重装系统后以前的数据_重装系统后 如何使用之前mysql数据
  18. 【关于我第一次上python课的感想】
  19. 更新包与已安装应用的签名不一致
  20. open source软件:Nomad介绍(任务编排工具)

热门文章

  1. discuzx管理员、超级版主、版主管理手册
  2. CM+CDH构建企业大数据平台系列(一)
  3. 《我们应当怎样做需求分析》读书笔记
  4. 结对作业——WordCount进阶版
  5. Hackme Writeup
  6. MaskFormer 在 MMDtection 中复现全流程解析
  7. Excel中函数row和column的特殊应用
  8. (PC+WAP)织梦模板财税记账工商注册认证类网站
  9. Nginx:rewrite指令(break,last,redirect,permanent)
  10. Google Chrome,是由Google开发的,一款设计非常简单、十分高效的Web浏览工具!