zoukankan      html  css  js  c++  java
  • IDA Pro权威指南-反汇编导航

    跳转地址,快捷键G,输入地址或16进制数,即可跳转到指定地址。

    IDA可后退前进,还有历史记录。回退快捷键Esc。

    栈帧

      函数运行时分配的内存块。

    调用函数步骤:

      1.调用方将被调用函数的参数放入指定位置。

      2.将控制权交给被调用函数 由 x86 call 或MIPS JAL等执行。并将返回地址保存。

      3.有必要的话,被调用函数会配置一个栈指针。

      4.为局部变量分配空间。

      5.生成结果,放入寄存器。

      6.释放栈空间。

      7.恢复原来保存的值。

      8.返还控制权,X86 ret 或MIPS JR ,清除栈。

      9.调整栈。

    调用约定

      调用约定,指调用方放置函数参数的位置。

    1.C调用约定(cdecl)

      按从右到左的顺序将参数入栈,即栈顶指向函数第一个参数。程序结束,要从调用方清除栈,适用于参数数量可变的函数。

      

    2.标准约定(stdcall)

      顺序从左到右,但是是被调用函数清除栈,适用于参数数量固定的函数。

    3.x86fastcall调用约定

      stdcall的一个变体,向寄存器最多传递前2个参数到ECX和EDX,其余参数依次入栈。

    4.C++调用约定(thiscall)

      Microsoft Visual C++,将this传递到ECX寄存器中,要求非静态成员函数清除栈。

      GUN g++,this可看做所有非静态成员函数的第一个隐含参数。调用非静态成员函数前,this被放入栈顶,且调用方清除栈。

    5.系统调用

    栈帧

      在X86中,EBP(扩展基址指针)通常用作栈帧指针。

    以此函数为例。

    1.保存EBP

    2.指向当前栈位置。

    3.分配局部变量。

    栈帧布局:

    bar调用:

    尾声:

     

     清除栈,然后将保存的EBP恢复,然后ret返回。

    IDA栈视图

      

    我们来看看它加载到IDA的情况:

    1.IDA认为函数使用EBP寄存器作为栈指针。

    2.gcc在栈中分配了120字节(78h)。

    3.120字节包括这两个参数值。编译器会用额外的字节填补局部变量空间,确保特殊的对齐方式。

    4.摘要栈视图:根据相对于被保存的地址的位置命名变量,局部变量在被保存的地址之上,函数参数在之下。局部变量var_XX,函数参数arg_XX。在这个函数中,因为没有使用参数a,所以没有arg_0.

    栈帧视图:

     

    文本搜索

      快捷键ALT+T

      必须搜索完整的词。比如搜索11111,找不到loc-11111.

      CTRL+T显示下一匹配结果。

    二进制搜索

      快捷键ALT+B   CTRL+B 显示下一匹配结果。

      Case-sensitive  区分大小写。

  • 相关阅读:
    JS原始类型Number数字类型
    JS数据类型基础知识
    JS基础循环语句和跳转语句
    JS对象类型数组方法篇
    JS对象类型数组基础篇
    JS基础逻辑运算符
    IE6,IE7,FF等浏览器不兼容原因及解决办法(转)
    DML、DDL、DCL区别
    Asp.net(c#)GridView分页时用图片显示上一页,下一页
    P3P完成跨域COOKIE
  • 原文地址:https://www.cnblogs.com/whitehawk/p/10845016.html
Copyright © 2011-2022 走看看