您当前的位置:首页 >> 手机
C语言内联汇编方式详解:REP系列指令及搭配大全
发布时间:2019-08-08
 

逆向驿站

  • 网络安全咨询

  • 日常生活中的网络安全案例解析

  • 逆向反汇编学习资料

  • 渗透测试学习资料

  • 实战病毒分析、软件逆向研究

  • 相关基本功知识速查工具

  • 区块链相关基础知识

网盘链接

https://pan.baidu.com/s/1YZqr9kFVu2R6R4rbgpepjQ 

提取码: q8tc

如果失效,获取最新链接,请公众号内回复:网盘



前言


本篇将用"C语言+内联汇编的方式"来详解:REP、REPE、REPNE、CMPS、SCAS以及他们之间的组合搭配,也许这些东西对于新手来讲看起头都是大的,其实如果是理解了话,也就简单了,下次再遇到这种指令搭配估计就是秒杀了,汇编这种底层语言最好的学习方式就是多动手写,实验。只靠看是形不成深刻记忆的。


速查版

公众号回复:rep

即可获得


固定搭配详解



REPE CMPS

可用于串的比较,遇到不同则停止,如下内联汇编源码测试

  • ecx初始赋值9,最终跳出循环时ecx值剩3

  • 说明cmpsb执行了6次,第6次的时候跳出了循环

  • 说明第6位遇到了不相同的字符

  • 对比hello和hello12着两个字符串,符合程序预期


REPNE SCAS

可用于再串中搜索固定值,搜索到相同则停止,如下内联汇编源码测试


  • cx初始赋值9,最终跳出循环时ecx值剩6

  • 说明scasb执行了3次,第3次的时候跳出了循环

  • 说明第3位遇到了搜索的结果

  • 对比小写字母"l"和"hello",符合程序预期

经常用于搜索0,因为内存中,字符串是以遇到0值为结尾的,所以第一次遇到0值的时候,就是字符串结尾得时候,通过ecx得值得变化,可以得到字符串长度。也就是说当你看到repne scasb 去扫描0得时候,第一反应是strlen()即可。


其他搭配

其实只要上面两个理解透了,那么下面的众多搭配举一反三即可,很多只是变种而已,大全如下,看看即可,懂了根本用不着死记硬背,碰到的多了自然就记住了


操作码:F3 6C

指令:REP INS r/m8, DX

作用:将 (E)CX 个字节从端口 DX 输入到 ES:[(E)DI]


操作码:F3 6D

指令:REP INS r/m16,DX

作用:将 (E)CX 个字从端口 DX 输入到 ES:[(E)DI]


操作码:F3 6D

指令:REP INS r/m32,DX

作用:将 (E)CX 个双字从端口 DX 输入到 ES:[(E)DI]


操作码:F3 A4

指令:REP MOVS m8,m8

作用:将 (E)CX 个字节从 DS:[(E)SI] 移到 ES:[(E)DI]


操作码:F3 A5

REP MOVS m16,m16

作用:将 (E)CX 个字从 DS:[(E)SI] 移到 ES:[(E)DI]


操作码:F3 A5

指令:REP MOVS m32,m32

作用:将 (E)CX 个双字从 DS:[(E)SI] 移到 ES:[(E)DI]


操作码:F3 6E

REP OUTS DX,r/m8

作用:将 (E)CX 个字节从 DS:[(E)SI] 输出到端口 DX


操作码:F3 6F

指令:REP OUTS DX,r/m16

作用:将 (E)CX 个字从 DS:[(E)SI] 输出到端口 DX


操作码:F3 6F

指令:REP OUTS DX,r/m32

作用:将 (E)CX 个双字从 DS:[(E)SI] 输出到端口 DX


操作码:F3 AC

REP LODS AL

作用:将 (E)CX 个字节从 DS:[(E)SI] 加载到 AL


操作码:F3 AD

指令:REP LODS AX

作用:将 (E)CX 个字从 DS:[(E)SI] 加载到 AX


操作码:F3 AD

指令:REP LODS EAX

将 (E)CX 个双字从 DS:[(E)SI] 加载到 EAX


操作码:F3 AA

指令:REP STOS m8

作用:使用 AL 填写位于 ES:[(E)DI] 的 (E)CX 个字节


操作码:F3 AB

REP STOS m16

作用:使用 AX 填写位于 ES:[(E)DI] 的 (E)CX 个字


操作码:F3 AB

指令:REP STOS m32

作用:使用 EAX 填写位于 ES:[(E)DI] 的 (E)CX 个双字


操作码:F3 A6

指令:REPE CMPS m8,m8

作用:在 ES:[(E)DI] 与 DS:[(E)SI] 中查找不匹配的字节


操作码:F3 A7

REPE CMPS m16,m16

在 ES:[(E)DI] 与 DS:[(E)SI] 中查找不匹配的字


操作码:F3 A7

指令:REPE CMPS m32,m32

作用:在 ES:[(E)DI] 与 DS:[(E)SI] 中查找不匹配的双字


操作码:F3 AE

REPE SCAS m8

作用:从 ES:[(E)DI] 开始查找非 AL 字节


操作码:F3 AF

指令:REPE SCAS m16

作用:从 ES:[(E)DI] 开始查找非 AX 字


操作码:F3 AF

指令:REPE SCAS m32

作用:从 ES:[(E)DI] 开始查找非 EAX 双字


操作码:F2 A6

指令:REPNE CMPS m8,m8

作用:在 ES:[(E)DI] 与 DS:[(E)SI] 中查找匹配字节


操作码:F2 A7

指令:REPNE CMPS m16,m16

作用:在 ES:[(E)DI] 与 DS:[(E)SI] 中查找匹配字


操作码:F2 A7

指令:REPNE CMPS m32,m32

作用:在 ES:[(E)DI] 与 DS:[(E)SI] 中查找匹配双字


操作码:F2 AE

指令:REPNE SCAS m8

作用:从 ES:[(E)DI] 开始查找 AL


操作码:F2 AF

指令:REPNE SCAS m16

作用:从 ES:[(E)DI] 开始查找 AX


操作码:F2 AF

指令:REPNE SCAS m32

作用:从 ES:[(E)DI] 开始查找 EAX


最后,喜欢这里的请推荐给你身边的朋友吧渗透测试、逆向破解、病毒分析、信息安全



网盘链接


https://pan.baidu.com/s/1YZqr9kFVu2R6R4rbgpepjQ 

提取码: q8tc

如果失效,获取最新链接,请公众号内回复:网盘



相关文章

● mov相关指令详解-常见汇编指令

● ASM汇编常用跳转指令-极速查

● CrackMe-006精解

● CrackMe-005精解(下)

● CrackMe-005精解(上)

● CrackMe-004精解

● CrackMe-003精解

● CrackMe-002精解

● CrackMe-001精解



End


本公众号关注网络安全最新咨讯

逆向反汇编、病毒分析教学等

常按二维码关注

交流学习QQ群:971488972

二维码加作者微信



标签:逆向|破解|反汇编|olldbg|渗透测试|病毒分析|网络安全|区块链

本期标签:汇编指令|rep相关指令| rep | repe | repne | repe cmps | repne scas 



相关阅读