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  区分大小写。

  • 相关阅读:
    HttpClient实现跨域请求
    Https如何让防止被监听
    Java 开发必会的工具类,代码量立减90%
    Java 临时变量的使用
    Java后端实现页面跳转
    Mybatis 实体类映射为null“坑”
    System.getProperty()_基本使用
    React项目中使用 FullCalendar v4 插件进行日程管理
    生成随机字符串工具示例
    java 图片与文件之间互转
  • 原文地址:https://www.cnblogs.com/whitehawk/p/10845016.html
Copyright © 2011-2022 走看看