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次的百度\哥哥后终于拼出了自己要的功能.不敢独享分享出来以供大家参考. ...
随机推荐
- tensorflow源码解析之common_runtime-session
目录 核心概念 session session_factory 1. 核心概念 session可以认为是一个执行代理.我们在客户端构建计算图,提供输入,然后把计算图丢给session去执行.因此,se ...
- badusb
badusb介绍 BadUSB是利用伪造HID设备执行攻击载荷的一种攻击方式.HID(Human InterfaceDevice)设备通常指的就是键盘鼠标等与人交互的设备,用户插入BadUSB,就会 ...
- Ubuntu16.04安装、卸载宝塔软件
宝塔是一款Linux可视化软件 1.一键安装 apt-get install wget && wget -O install.sh http://download.bt.cn/inst ...
- Linux 环境Skywalking部署Elasticsearch
一.环境准备 1.Java jdk 11+(安装教程可参考https://www.cnblogs.com/sportsky/p/15973713.html) 2.elasticsearch 二.环境搭 ...
- Servlet的response乱码问题
一.response有两种输出流(编码:UTF-8): 1.字节流:response.getOutputStream().write(date.getBytes("UTF-8")) ...
- httpRunner使用小结
1.每个系统可以给所有相关接口准备一份完整的主流程数据,这样就不用每执行一条用例就要先执行很多前置用例2.每条用例在设计之初,关于使用的前置数据,以及条件判断的数据值,以及设置的前提条件数据值,尽量保 ...
- 如何在 spring 中启动注解装配?
默认情况下,Spring 容器中未打开注解装配.因此,要使用基于注解装配,我们 必须通过配置 <context:annotation-config/> 元素在 Spring 配置文件 中启 ...
- sleep()和wait()的区别?notify()和notifyAll()的区别?start()和run()的区别?
sleep()和wait()的区别? 这两个方法来自不同的类分别是Thread和Object sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法.wait,not ...
- centos 7环境下安装部署zookeeper
近一直在看zookeeper的知识,有所收获,打算写些一些关于zookeeper的博客,也当做是自己的复习和笔记. 在上一篇 博客中简单地介绍了centos 7 下如何安装jdk,这一篇将介绍如何在c ...
- 学习zabbix(五)
前言 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.zabbix组件主要分两个: zabbix-server和zabbix-agent.支持的监控协议有I ...