zoukankan      html  css  js  c++  java
  • 汇编操作内存地址、堆栈

    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]

  • 相关阅读:
    Codeforces1420E. Battle Lemmings 题解 动态规划
    C++使用partial_sum求前缀和
    HDU6171 Admiral 题解 折半搜索
    HDU3017 Treasure Division 题解 折半搜索
    使用re.split 按标点+空格的一种分割办法
    实现CString的Format功能,支持跨平台
    转载一篇makefile,说的很详细
    Microsoft C++ 异常: std::system_error std::thread
    源码一样,运行结果不一致的解决办法
    记录一次阿里的电话面试
  • 原文地址:https://www.cnblogs.com/heyhx/p/14158268.html
Copyright © 2011-2022 走看看