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次的百度\哥哥后终于拼出了自己要的功能.不敢独享分享出来以供大家参考. ...
随机推荐
- thinkpad笔记本选型
ThinkPad分为了几大系列,低端的有L系列.E系列,比较高端的有T系列.X系列及P系列,这些系列中质量比较稳定属于商务办公系列,中端有针对商务或者是娱乐的R系列.A系列和S系列.具体介绍如下: 1 ...
- Netty学习(二)使用及执行流程
Netty简单使用 1.本文先介绍一下 server 的 demo 2.(重点是这个)根据代码跟踪一下 Netty 的一些执行流程 和 事件传递的 pipeline. 首先到官网看一下Netty Se ...
- ArcMap操作随记(2)
1.空间校正 变换-仿射 仅发生偏移 橡皮页变化 形状改变 变换-投影 旋转,改变角度 变换-相似 改变大小.形状不变 2.计算行列号 Int(([POINT_Y]-1273.143242)/30)+ ...
- 基于python 信用卡评分系统 的数据分析
基于python 信用卡评分系统 的数据分析 import pandas as pd import matplotlib.pyplot as plt #导入图像库 from sklearn.ensem ...
- 跨平台跨架构的统信DTK开发套件教程及常见问题
DTK是统信基于Qt开发的一整套简单且实用的通用开发框架,处于统信UOS系统中的核心位置,统信UOS浏览器.音乐.邮件等40余款原生应用全部使用DTK开发.DTK从开发者的角度出发,融合现代化的开发理 ...
- Ubuntu一键安装LAMP,LNMP
参考: https://blog.csdn.net/xueyingqi/article/details/50674078 https://www.cnblogs.com/pengzheng/p/363 ...
- 实践丨SpringBoot整合Mybatis-Plus项目存在Mapper时报错
摘要:在SpringBoot运行测试Mybatis-Plus测试的时候报错的问题分析与修复 本文分享自华为云社区<SpringBoot整合MybatisPlus项目存在Mapper时运行报错的问 ...
- 深入理解Java虚拟机-走进Java
一.Java技术体系 从广义上讲, Clojure. JRuby. Groovy等运行于Java虚拟机上的语言及其相关的程序都属于Java技术体系中的一员. 如果仅从传统意义上来看, Sun官方所定义 ...
- 数据库中的ACID
参考链接:什么是ACID 数据库中的锁机制
- OGNL(Object-Graph Navigation Language)使用
OGNL表达式:https://www.jianshu.com/p/6bc6752d11f4 Apache OGNL:http://commons.apache.org/proper/commons- ...