逆向_04汇编学习_内存操作
内存_堆栈
- 寻址公式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]
- 读取内存的值
内存/堆栈知识
- 数据压入方式
- 方式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
- 方式1
- 数据读取
- 通过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]
- 读第二个压入的数据
- 通过base加偏移来读取
- 弹出数据
- 方式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]
- 方式1
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" 转载请保留原文链接及作者。