【reverse】逆向3 寻找地址

寻址公式一:[立即数]

读取内存的值:

mov eax,dword prt ds:[0x13FFC4]

将内存编号为0x13FFC4、0x13FFC5、0x13FFC6、0x13FFC7的数据写入eax中

向内存中写入数据

mov dword prt ds:[0x13FFC4],eax

将eax的数据写入内存编号为0x13FFC4、0x13FFC5、0x13FFC6、0x13FFC7中

获取内存编号

lea eax,dword ptr ds:[0x13FFC4]
lea eax,dword prt ds:[edx]

获取0x13FFC4地址的内存编号(就是0x13FFC4)

获取edx的内存编号

寻址公式二:[reg]

reg代表寄存器,可以是8个通用寄存器中的任意一个

读取内存的值:

# 基址
mov ecx,0x13FFD0
# 找基址的数据
mov eax,dword prt ds:[ecx]

其实这个寻找公式的本质和第一个一样,只不过第一个是直接读取内存编号的数据

而这个是先把要找的内存地址放入一个寄存器中,在根据寄存器中存储的内存编号去寻找这个内存编号的数据

举个例子

第一句汇编将内存编号0x19FF74存入ecx中

第二句汇编将存入ecx中的内存编号的数据读取出来

我们先在堆栈窗口观察0019FF74编号的数据为7725FA29

我们运行第一句汇编

可以看到我们把0019FF74编号存入了ecx中

再运行第二句汇编

可以看到我们把0019FF74编号中的数据读到了eax中

向内存中写入数据

mov edx,0x13FFD8
mov dowrd ptr ds:[edx],0x87654321

向0x13FFD8这个内存编号中写入0x87654321这个数据

获取内存编号

mov eax,0x19FF74
lea ecx,dword ptr ds:[eax]

读取eax的内存编号(这里eax的内存编号是0x19FF74)

运行第一句汇编前

运行第一句汇编后,将0x19FF74内存编号存入eax

运行第二句汇编后,ecx中获取了eax的内存编号0x19FF74

寻址公式三:[reg+立即数]

读取内存中的值

mov ecx,0x19FF74
mov eax,dword ptr ds:[ecx+0x4]

公式3和公式2其实一样,只不过多了一个立即数的偏移量

第一句汇编是将0x19FF74内存编号存入ecx

第二句汇编是将ecx+0x4(0x19FF78)的内存编号的数据放入eax中

运行前的数据状况

运行第一句

运行第二句

可以发现eax中存入了0x0019FF78这个内存编号

向内存中写入数据

mov ecx,0x19FF74
mov dword prt ds:[ecx+0xC],0x87654321

向内存编号为0x19FF74+0xC写入0x87654321的数据

获取内存编号

lea eax,dword ptr ds:[ecx+0x8]

我们看这张图

lea是读取ecx+0x8的内存编号

而ecx是0x19FF74

所以如果运行了这句汇编,那么eax的那里将会存入0x19FF7C的内存编号

寻址公式四:[reg+reg*{1,2,4,8}]

读取内存的值

mov eax,0x13FFC4
mov ecx,0x2
mov edx,dword ptr ds:[eax+ecx*4]

第一句汇编,将0x13FFC4内存编号写入eax

第二句汇编,将0x2立即数写入ecx

第三句汇编,将eax+ecx*4(0x13FFC4+0x8 = 0x13FFCC)内存编号的数据写入edx

题外话:eax+ecx*4不会超过FFFFFFFF

向内存中写入数据

mov eax,0x13FFC4
mov ecx,0x2
mov dword ptr ds:[eax+ecx*0x4],0x87654321

第一句汇编,将0x13FFC4内存编号写入eax

第二句汇编,将0x2立即数写入ecx

第三句汇编,将eax+ecx*4(0x13FFC4+0x8 = 0x13FFCC)内存编号的值改为0x87654321

获取内存编号

mov eax,0x13FFC4
mov ecx,0x2
lea eax,dword ptr ds:[eax+ecx*4]

第一句汇编,将0x13FFC4内存编号写入eax

第二句汇编,将0x2立即数写入ecx

第三句汇编,将eax+ecx*4(0x13FFC4+0x8 = 0x13FFCC)内存编号写入eax,此时eax就是0x13FFCC

寻址公式五:[reg+reg*{1,2,4,8}+立即数]

读取内存的值

mov eax,0x13FFC4
mov ecx,0x2
mov edx,dowrd ptr ds:[eax+ecx*4+0x4]

第一句汇编,将0x13FFC4内存编号写入eax

第二句汇编,将0x2立即数写入ecx

第三句汇编,将eax+ecx*4+0x4(0x13FFC4+0x8+0x4 = 0x13FFD0)内存编号的数据写入edx

向内存中写入数据

mov eax,0x13FFC4
mov ecx,0x2
mov dowrd ptr ds:[eax+ecx*4+0x4],0x87654321

第一句汇编,将0x13FFC4内存编号写入eax

第二句汇编,将0x2立即数写入ecx

第三句汇编,将eax+ecx*4+0x4(0x13FFC4+0x8+0x4 = 0x13FFD0)内存编号的数据改为0x87654321

获取内存编号

mov eax,0x13FFC4
mov ecx,0x2
lea eax,dword ptr ds:[eax+ecx*4+0x4]

读取eax+ecx*4+0x4这个内存编号,也就是0x13FFD0

【reverse】逆向3 寻找地址的更多相关文章

  1. 【C++】从零开始的CS:GO逆向分析1——寻找偏移与基址的方法

    [C++]从零开始的CS:GO逆向分析1--寻找偏移与基址的方法   前言:此文章主要用于提供方法与思路,fps游戏基本都能如此找偏移,文章里找的偏移比较少,主要用来演示寻找思路,文章的后记中会附一个 ...

  2. 行业干货-如何逆向解决QT程序汉化中乱码问题

    前言 “一款QT开发的国外软件,大概率是没有做中文支持的,所以你汉化中,不论怎么设置编码都一定是乱码.面对这个问题,你去互联网上找答案,答案却大多是复制粘贴的开发中解决乱码的文章,可是我们是要逆向中解 ...

  3. historyReverser & array reverse

    historyReverser & array reverse\ "use strict"; /** * * @author xgqfrms * @license MIT ...

  4. [BUUCTF]REVERSE——helloword

    helloword 题目是安卓逆向.安卓逆向工具下载地址 用APKIDE打开附件,ctf+f调出检索版,检索main函数,能看到flag字符串 flag{7631a988259a00816deda84 ...

  5. html+css笔记

    文档结构 1.html文档结构 ①文档类型声明 严格型(标准模式):    <!DOCTYpE HTML>   HTML5 XHTML 1.0:<!DOCTYpE html pUbL ...

  6. CTF:从0到1 -> zero2one

    本篇blog首发0xffff论坛(CTF:从0到1->zero2one - 0xFFFF),中间有各位大佬补充,搬到了个人博客CTF:从0到1 -> zero2one | c10udlnk ...

  7. Linux查找命令:grep,awk,sed

    grep grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具 ...

  8. 7.Java中的字符串

    1.String的特性 特性一:不可变性 String s=new String("yangyun") s=s.toUpperCase(); 这里的s,s占用的空间是不一样的(地址 ...

  9. http协议(一)基础知识

    我自己写的随笔一般是偏学习笔记性质的,或者一点个人理解,适合新人,大牛可以忽略这个...... 参考书籍——<图解http> 当我们在浏览器的地址栏中输入网址,然后点击回车,接着,浏览器就 ...

随机推荐

  1. Semaphore信号量源码解析

    介绍 Semaphore是什么 Semaphore可以称为信号量,这个原本是操作系统中的概念,是一种线程同步方法,配合PV操作实现线程之间的同步功能.信号量可以表示操作系统中某种资源的个数,因此可以用 ...

  2. Oracle不等于符号过滤null情况

    在Oracle查询过程中,条件查询时,用"<>"操作符进行查询会过滤掉字段为null的记录. 一.不使用"<>"操作符查询:select ...

  3. c(++)可变参数之格式化字符串

    0.序言 使用printf函数,其参数就是可变参数.下面将使用 C语言  的库函数实现可变参数的函数 . 用途(欢迎补充): A.记录日志,可能需要将变量格式化输出到日志文件. B.格式化字符串,显示 ...

  4. 设计owllook网络小说推荐系统

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 数据 推荐算法 协同过滤 基于流行度的推荐 基于用户标签相似度的推荐 评价指标 算 ...

  5. 【LeetCode】915. Partition Array into Disjoint Intervals 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/partitio ...

  6. 在Latex 下写毕业论文

    目录 配置 TeXlive 论文模板 TeXstudio 写作 特殊环境 算法 定理.定义 编译 可能出现的问题 参考文献 缺少volume 学位论文 配置 TeXlive 下载了最新的texlive ...

  7. Rikka with wood sticks(hdu5203)

    Rikka with wood sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/O ...

  8. 1370 - Bi-shoe and Phi-shoe

    1370 - Bi-shoe and Phi-shoe   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 3 ...

  9. bugku的一道代码审计基础题:eval

    首先看到 include "flag.php",第一反应就应该是文件包含 直接先?hello=file:////etc, 然后啥也没 那就再检查一下代码,eval(var_dump ...

  10. CS5211替代CH7511B|设计DP转LVDS转接板|替代CH7511B

    CH7511B是一款DP转lvds屏转换芯片CH7511B是一款eDP转LVDS转换芯片.CH7511B将嵌入式DisplayPort信号转换为LVDS(低压差分信号).通过CH7511B的高级解码/ ...