OllyDbg---循环、串操作和寻址方式
循环 字符串指令和寻址方式
循环
XOR ECX,ECX
MOV ECX,15H
LABEL:
DEC ECX
CMP ECX,0
JNE LABEL
LOOP
- 重复循环,直到计数器的值为0,每次循环将计数器的值减1,如果计数器为0就跳转到指定地址,比如loop short 401007。
LOOPZ,LOOPE
- 重复循环,直到零标志位Z被置为1。
LOOPNZ,LOOPNE
重复循环,直到零标志位被置为0。
LOOPZ, LOOPNZ指令还需要检查零标志位,只有计数器的值和零标志位Z都满足条件时才会循环。
串操作
MOVS
- 从一个地址向另一个地址复制数据,源地址保存在ESI寄存器中,目的地址保存在EDI寄存器中。
- 拷贝4个字节的内容时,还可以写为MOVSD,拷贝两个字节的内容时可以写为MOVSW,拷贝一个字节的内容时可以写为MOVSB。
- MOVS指令不能将数据拷贝到没有写入权限的内存单元中,强制写入的话会引发异常。
REP
- 可以作为一些指令的前缀,尤其MOVS指令,该前缀表示当前指令需要执行的次数ECX,每次循环计数器ECX的值递减1,和循环一样。
- REP MOVS则不一定拷贝4个字节的内容,它拷贝的大小是 每次拷贝的大小乘上计数器ECX。
LODS
- 该指令是从源地址拷贝数据到EAX中
- REP也可以搭配LODS指令配合使用,重复执行直到计数器ECX的值为0。
- 一次拷贝两个字节的内容的指令为LODSW,一次拷贝一个字节的内容的指令为LODSB。
STOS
- 该指令是将EAX的值拷贝到寄存器EDI指向的内存单元中。
- 该指令也可以搭配REP使用
- 每次操作两个字节的STOSW指令和每次操作一个字节的STOSB指令。
CMPS
- 该指令是比较ESI和EDI指向内存单元的内容。
- 该指令执行的是算数减法的运算,如果差值为0,零标志位Z会被置为1。
- 由于该指令影响零标志位Z,所以可以搭配REPZ/REPE前缀指令来使用,直到计数器ECX的值为0或者零标志位被清0。
- REPNZ/REPNE也可以搭配该指令使用。
寻址方式
直接寻址
最简单的一种寻址方式,该指令的操作数包含一个具体的地址。
MOV DWORD PTR [00513450], ECX
MOV AX, WORD PTR [00510A25]
MOV AL, BYTE PTR [00402811]
CALL 452200
JMP 421000
间接寻址
许多程序使用间接寻址来完成一些复杂的操作,在刚开始分析调试的时候真实地址并不会显示出来,直到执行到这条指令时,查看相应寄存器的值才能知道真实的地址。
如果想在指令执行之前看到真实的地址,需要在该指令上下断点,断下来以后查看寄存器的值或者查看解释窗口中的提示信息。
MOV DWORD PTR[EAX], ECX
CALL EAX
JMP [EAX+4]
OllyDbg---循环、串操作和寻址方式的更多相关文章
- 汇编实现: C库常见函数,串操作指令作用
目录 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 二丶loads实现Strlen操作. 三丶stos的作用 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 void _ ...
- 汇编3栈帧,参数传递,串操作,混合汇编,x64,asm文件
基础知识2 选择结构 通过判断 + 条件跳转指令来实现 循环结构 通过判断 + 条件跳转指令来实现(会有一个向上跳转的语句) 函数调用约定 C调用约定: 由外部平衡栈 标准调用约定 : 由函数内部平衡 ...
- 串操作,C++实现
对串的基本操作都全已经实现 对kmp,kf字符串替换等功能全都已经实现 由于时间原因.没来得及注释,希望大家参考见谅. 串操作hstring.h头文件实现 //kallen 1 #ifndef _HS ...
- js基础总结02--字符串操作
1.字符串中对单个字符位置的操作 indexOf(char); 从左往右查找,返回匹配到的第一个字符的位置,没有匹配则返回-1 lastiIndexOf(char); 从右往左查找,返回匹配到的第一个 ...
- python笔记9-字符串操作
1.定义字符串 字符串有下标从0开始,用[]可以来取下标 2.字符串读取 字符串可以使用循环for,每次取一个取出,循环对象的每个元素 3.字符串修改-字符串不可修改 字符串是不可变变量,一旦定义就不 ...
- go标准库的学习-strings-字符串操作
参考https://studygolang.com/pkgdoc 导入方式: import "strings" strings包实现了用于操作字符的简单函数. 常用的几个函数: f ...
- python学习笔记2-字符串操作
一.字符串切片 #切片也能适合字符串 tittle='今 天 发 苹 果' for i t in enumerate(tittle): #enumerate可以同时循环下标和值 print('%s:% ...
- hiho# 1465 重复旋律8 循环串计数 后缀自动机
题目传送门 题意:给出一个母串,再给出n个串,问对于每个串,母串中有几个子串是可以通过循环变化得到这个串. 思路:对母串建SAM,求出$right$集. 把匹配串复制一遍,和母串进行匹配,当匹配长度大 ...
- nodejs 循环中操作需要同步执行解决方案
最近用nodejs做了个针对某网站的小爬虫.干坏事得低调对吧,不能同时开太多的网络访问,结果各种回调/循环虐的心力交瘁. 经过了n次的百度\哥哥后终于拼出了自己要的功能.不敢独享分享出来以供大家参考. ...
随机推荐
- 解决移动端ios网页端收起键盘导致的页面空白问题
一句代码就搞定了,只要失焦的时候把窗口滚动位置设置到(0,0)就行了 <input type="text" onblur="window.scrollTo(0, 0 ...
- 前端性能优化 —— 使用 BMP 图片代替 canvas.toDataURL
前端开发中有时需要将 canvas 的内容导出成图片文件,例如供 CSS 使用,通常会使用 canvas.toDataURL,兼容性好并且简单. 不过 canvas.toDataURL 显然是非常低效 ...
- 在 Ubuntu 上使用源码安装 OpenResty
镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 本文将介绍如何在 Ubuntu 上使用源码安装 OpenResty. 目标 Ubuntu 18.04 OpenResty 1.19.3.2 安装依 ...
- web服务器-Nginx URL重写
web服务器-Nginx URL重写 一. URL重写介绍 和apache等web服务软件一样,rewrite的主要功能是实现URL地址的重定向.Nginx的rewrite功能需要PCRE软件的支持, ...
- [SPDK/NVMe存储技术分析]010 - 理解SGL
在NVMe over PCIe中,I/O命令支持SGL(Scatter Gather List 分散聚合表)和PRP(Physical Region Page 物理(内存)区域页), 而管理命令只支持 ...
- KestrelServer详解[1]:注册监听终结点(Endpoint)
具有跨平台能力的KestrelServer是最重要的服务器类型.针对KestrelServer的设置均体现在KestrelServerOptions配置选项上,注册的终结点是它承载的最重要的配置选项. ...
- Ubuntu修改登录密码
Ubuntu 修改用户名或密码后无法登陆 解决方法 2017年09月01日 16:48:05 lee_3312 阅读数:2192 解决方法:进入recovery-mode修改登录信息 1)重启系统 ...
- Redisson 加锁原理
一.分布式加锁过程 RLock lock = redissonClient.getLock(REDISSON_DISTRIBUTE_KEY); lock.lock(); wireshark抓包可以看见 ...
- jQuery的优缺点,与vue的不同,vue的优缺点?
jq优点: 比原生js更易书写, 封装了很多api, 有丰富的插件库; 缺点: 每次升级与之前版本不兼容, 只能手动开发, 操作DOM很慢, 不方便, 变量名污染, 作用域混淆等. vue优缺点: 双 ...
- spring-boot-learning-监听事件
Springboot扩展了Spring的ApplicatoionContextEvent,提供了事件: ApplicationStartingEvent:框架启动事件 ApplicationEnvir ...