汇编操作内存地址、堆栈
1. 32位 16位 8位通用寄存器
EAX ECX EDX EBX ESP EBP ESI EDI
AX CX DX BX SP BP SI DI
AL CL DL BL AH CH DH BH
2.寄存器的结构:EAX-AX-AH-AL的对应关系
EAX-AX-AH-AL是一个寄存器的不同位
3. 操作内存的时候,影响的可能不是一个数据。
比如 mov word ptr ds:[0x0012FFDC],0xAA 影响的不仅仅是 0x12FFDC这一个内存编号的数据,也附带影响了下一个内存编 号的数据
4.寻址方式:
方式一:[立即数]
a.读取内存的值
MOV EAX,DWORD PTR DS:[0X13FFC4]
MOV EAX,DWORD PTR DS:[0X13FFC8]
b.内存中写数据
mov dword ptr ds:[0x13ffc4],eax
mov dword ptr ds:[0x13ffc8],ebx
c.获取内存编号
lea eax,dword ptr ds:[0x13ffc4]
lea eax,dword ptr ds:[esp+8]
方式二:[reg] reg代表寄存器,可以是8个通用寄存器中的任意一个
a.读取内存的值
MOV ECX,0x13FFD0
MOV EAX,DWORD PTR DS:[ECX]
b.向内存中写数据
MOV ECX,0x13FFD0
MOV DWORD PTR DS:[ECX],0x23232345
c.获取内存编号:
LEA EAX,DWORD PTR DS:[EDX]
MOV EAX,DWORD PTR DS:[EDX]
方式三:[reg+立即数]
a.读取内存值
MOV ECX,DWORD PTR DS:[EAX+0X13FFC4]
MOV EDX,DWORD PTR DS:[ECX+0X13FFC8]
b.向内存中写值
MOV DWORD PTR DS:[ECX+0X13FFC4],0X13FF45
c.获取内存编号
LEA EAX,DWORD PTR DS:[ECX+0X13FFC4]
方式四:[reg+reg*{1,2,4,8}]
a.读取内存值
MOV EAX,13FFC4
MOV ECX,2
MOV EDX,DWORD PTR DS:[EAX+ECX*4]
b.向内存中写数据
MOV EAX,13FFC4
MOV ECX,2
MOV DWORD PTR DS:[EAX+ECX*4],43332223
c.获取内存编号
LEA EAX,DWORD PTR DS:[EAX+ECX*4]
方式五:[reg+reg*{1,2,4,8}+立即数]
a.读取内存值
MOV EAX,13FFC4
MOV ECX,2
MOV EDX,DWORD PTR DS:[EAX+ECX*4+0xFF]
b.向内存中写值
MOV EAX,13FFC4
MOV ECX,2
MOV DWORD PTR DS:[EAX+ECX*4+0xFF34],0x3453
c.获取内存编号
LEA EAX,DWORD PTR DS:[EAX+ECX*4+0x8984]