zoukankan      html  css  js  c++  java
  • OllyDebug调试技巧(二)

    Chinese:

    1、32位寄存器要熟悉,EAX,EBX,ECX,EDX是数据寄存器,ESI和EDI是变址寄存器,这些寄存器一般可以随意使用

    EAX: 扩展累加寄存器

    EBX: 扩展基址寄存器

    ECX: 扩展计数寄存器

    EDX: 扩展数据寄存器

    ESI: 扩展来源寄存器(源地址)

    EDI: 扩展目标寄存器(目的地址)

    2、指针寄存器EBP,ESP,EIP

    EBP: 扩展基址指针寄存器

    ESP: 扩展堆栈指针寄存器

    EIP: 扩展的指令指针寄存器

    注意这三个寄存器,EBP主要用于栈和栈帧;ESP指向当前进程的栈空间地址;EIP总是指向下一条要执行的指令。

    3、栈的地址是从高地址到低地址。

    4、在反汇编的过程中,经常要找Call,其实Call xxx就是push eip,然后jmp xxx,执行完就ret到Call指令所在的地址。

    5、Call的几种方式

    call 404000h; 直接跳到函数或过程的地址

    call eax; 函数或过程地址存放在eax

    call dword ptr [eax]; Call的是eax里面存的地址的值

    call dword ptr [eax+5]; Call的是eax里面存的地址+5后的值

    call dword ptr [<&API>]; Call一个系统api

    6、在反汇编中会经常遇到Test指令,Test指令和And指令一样,对两个操作数进行位于运算,只是不将结果保存,操作后对标志位重新置位。该指令在反汇编中99%是test eax, eax(如果eax为0,则ZF位置1)......

    7、在反汇编的过程中经常遇到条件跳转指令

    8、在条件跳转指令前也会经常遇到cmp指令

    cmp a, b

    如果a-b=0, 则ZF置1

    无符号时:

    CF=1 则说明了有进位或借位,cmp是进行的减操作,故可以看出为借位,所以,此时a<b

    CF=0 则说明了无借位,但此时要注意ZF是否为0,若为0,则说明结果不为0,故此时a>b

    有符号时:

    若SF=0,OF=0 则说明了此时的值为正数,没有溢出,可以直观的看出,a>b

    若SF=1,OF=0 则说明了此时的值为负数,没有溢出,则为a<b

    若SF=0,OF=1 则说明了此时的值为正数,有溢出,可以看出a<b

    若SF=1,OF=1则说明了此时的值为负数,有溢出,可以看出a>b

    最后两个可以作出这种判断的原因是,溢出的本质问题:

    两数同为正,相加,值为负,则说明溢出

    两数同为负,相加,值为正,则说明溢出

    故有,正正得负则溢出,负负得正则溢出

  • 相关阅读:
    http协议头文件的控制信息 .
    http头文件详解
    java(计算机)常见加密算法详解
    设计模式系列命令模式
    dom对象模型浏览器对象的分层结构图
    验证码实现详解
    JAVA中使用FTPClient实现文件上传下载
    javax.crypto.Cipher类提供加密和解密功能,该类是JCE框架的核心。
    java中的使用RSA算法进行公钥加密私钥解密 .
    Httpservlet源码及实现机制详解
  • 原文地址:https://www.cnblogs.com/maplewan/p/3242145.html
Copyright © 2011-2022 走看看