逆向_04汇编学习_内存操作

  1. 内存_堆栈
    1. 内存/堆栈知识
    2. push/pop的简单会用

内存_堆栈

  • 寻址公式1:[立即数]
    • 读取内存的值
      • mov eax,dword ptr ds:[0x123456789]
      • mov eax,dword ptr ds:[0x123456780]
    • 向内存中写入数据‘
      • mov dword ptr ds:[0x123456789],eax
      • mov dword ptr ds:[0x123456780],eax
    • 获取内存编号
      • lea eax,dword ptr ds:[0x123456789]
      • lea eax,dword ptr ds:[esp+8]
  • 寻址公式二:[reg] reg代表寄存器 可以是8个通用寄存器中的任意一个
    • 读取内存的值
      • mov ecx,0x12345678
      • mov eax,dword ptr ds:[ecx]
    • 向内存中写入数据‘
      • mov edx,0x12345678
      • mov dword ptr ds:[edx],0x87654321
    • 获取内存编号
      • lea eax,dword ptr ds:[edx]
  • 寻址公式三:[reg+立即数]
    • 读取内存的值
      • mov ecx,0x12345678
      • mov eax,dword ptr ds:[ecx+4]
    • 向内存中写入数据‘
      • mov edx,0x12345678
      • mov dword ptr ds:[edx+8],0x87654321
    • 获取内存编号
      • lea eax,dword ptr ds:[edx+8]
  • 寻址公式四:[reg+reg*{1,2,4,8}]
    • 读取内存的值
      • mov ecx,0x12345678
      • mov eax,2
      • mov edx,dword ptr ds:[eax+ecx*4]
    • 向内存中写入数据‘
      • mov ecx,0x12345678
      • mov eax,2
      • mov dword ptr ds:[eax+ecx*4],0x1235698
    • 获取内存编号
      • lea eax,dword ptr ds:[eax+ecx*4]
  • 寻址公式五:[reg+reg*{1,2,4,8}+立即数]
    • 读取内存的值
      • mov ecx,0x12345678
      • mov eax,2
      • mov edx,dword ptr ds:[eax+ecx*4+4]
    • 向内存中写入数据‘
      • mov ecx,0x12345678
      • mov eax,2
      • mov dword ptr ds:[eax+ecx*4+4],0x1235698
    • 获取内存编号
      • lea eax,dword ptr ds:[eax+ecx*4+4]

内存/堆栈知识

mark

  • 数据压入方式
    • 方式1
      • mov dword ptr ds:[edx-4],0xAAAAAAAA
      • sub edx,4
    • 方式2
      • sub edx,4
      • mov dword ptr ds:[edx],0xAAAAAAAA
    • 方式3
      • mov dword ptr ds:[edx-4],0xAAAAAAAA
      • lea edx,dword ptr ds:[edx-4]
    • 方式4
      • lea edx,dword ptr ds:[edx-4]
      • mov dword ptr ds:[edx],0xAAAAAAAA
  • 数据读取
    • 通过base加偏移来读取
      • 读第一个压入的数据
        • mov esi,dword ptr ds:[ebx-4]
      • 读取第四个压入的数据
        • mov esi,dword ptr ds:[ebx-0x10]
    • 通过top加偏移来读取
      • 读第二个压入的数据
        • mov esi,dword ptr ds:[edx+4]
      • 读取第三个压入的数据
        • mov esi,dword ptr ds:[edx+8]
  • 弹出数据
    • 方式1
      • mov eax,dword ptr ds:[edx]
      • add edx,4
    • 方式2
      • add edx,4
      • eax,mov dword ptr ds:[edx-4]
    • 方式3
      • mov eax,dword ptr ds:[edx]
      • lea edx,dword ptr ds:[edx+4]
    • 方式4
      • lea edx,dword ptr ds:[edx+4]
      • eax,mov dword ptr ds:[edx-4]

push/pop的简单会用

  • push 指令
    • push r32
    • push r16
    • push m32
    • push m16
    • push imm8/imm16/imm32
  • pop指令
    • pop r32
    • pop r16
    • pop m32
    • pop m16
  • pushad
    • 将eax,ecx,edx,ebx,esp,ebp,esi,edi(通用寄存器)入栈
  • popad
    • 将eax,ecx,edx,ebx,esp,ebp,esi,edi(通用寄存器)出栈

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 787772394@qq.com

文章标题:逆向_04汇编学习_内存操作

本文作者:二豆子·pwnd0u

发布时间:2020-09-07, 13:58:18

最后更新:2023-05-18, 09:49:15

原始链接:http://blog.codefat.cn/2020/09/07/%E9%80%86%E5%90%91-04%E6%B1%87%E7%BC%96%E5%AD%A6%E4%B9%A0-%E5%86%85%E5%AD%98%E6%93%8D%E4%BD%9C/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

/*爱心代码*/ /*雪花效果*/ /*百度代码自动提交*/