• 三、常用的汇编指令


    常用的汇编指令:

    push :把一个32位的操作数压入堆栈中。这个操作导致esp被减4.esp被形象地称为栈顶。我们认为顶部地址是地址小的区域,那么,
    压入堆栈的数据越多,这个堆栈也就越堆越高,esp也就越来越小。在32位平台上,esp每次减少4(字节)。

    pop :相反,esp被加4,一个数据出栈。pop的参数一般是一个寄存器,栈顶的数据被弹出到这个寄存器中。

    一般不会把sub、add这样的算术指令,以及call、ret这样的跳转指令归入堆栈相关指令中。但实际上在函数参数传递过程中,sub和add最常用来操作
    堆栈;call和ret对堆栈也有影响。所以这里作为特殊处理。
    sub :减法。格式为:sub 被减数,减数
    add :加法。格式与sub类似。
    ret :返回。实际返回地址是当前call对应的下一行代码,这个返回的地址一般会在call执行时被压入堆栈。
    call:调用函数。

    1 call的本质相当于push+jmp      ret的本质相当于pop+jmp

    如果需要在堆栈中分配4个4字节长整型的空间,则用esp减去4*4=16即可。

    同时,也可以用add来恢复。常用于分配函数局部变量空间。


    mov 数据移动指令,或者说数据复制命令。
    用法是 mov 移到哪(到哪去),移动谁(从哪来)

    xor 异或指令,通常用于代替mov eax,0

    lea指令
    lea edi,[ebp-0cch] 表示将[ebp-0cch]数据单元对应的内容赋值给edi
    不过,lea取的是地址,也就是说,相当于mov edi,ebp-0cch(注意,这条指令是不能被执行的,这里只是用来作说明而已)

    stos指令:
    先来看看上次实验的代码

    1 mov ecx,30h
    2 mov eax,0ccccccch
    3 rep stos dword ptr es:[edi]

    stos是串存储指令,它的功能是将eax中的数据放入edi所指的地址中(edi中内容为地址),同时,edi会增加4字节数(dword表示4字节),执行到ecx的值为零为止。这里的stos其实是stosd,对应的还有stosb、stosw,分别对应处理4、1、2个字节,这里对堆栈中30*4(0c0h)个字节初始化为0cch(也就是int3指令的机器码),这样发生意外时执行堆栈里面的内容会引发调试中断。

    jmp 无条件跳转,有去无回
    jg 大于时跳转
    gl 小于是跳转
    jge 大于等于时跳转
    cmp 比较(相减比较)

  • 相关阅读:
    翻译:让网络更快一些——最小化浏览器中的回流(reflow)
    ArcGIS API for flex 3.1离线文档
    innerHeight与clientHeight、innerWidth与clientWidth
    在Excel2010中输入身份证号
    JavaScript window.location对象
    Apache2.2+php5.2+the requested operation has failed
    Js中的window.parent ,window.top,window.self
    Mongoose 3.0 executable does not start
    Download ActionScript 3 reference files as a single zipActionScript 3 下载
    Flex 4.6 API 离线文档
  • 原文地址:https://www.cnblogs.com/tk091/p/2471942.html
Copyright © 2020-2023  润新知