汇编操作内存地址、堆栈

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]

原文地址:https://www.cnblogs.com/heyhx/p/14158268.html