zoukankan      html  css  js  c++  java
  • 逆向-IDA常用快捷

    首先来复习一下几种常见的调用约定:

    __cdecl

    这是C的调用约定,从右向左依次压入参数,调用者负责平衡堆栈,函数外add x来平衡堆栈。

    __stdcall

    这是windows的标准调用约定,从右向左依次压入参数,被调用者负责平衡堆栈,函数内retn x来平衡堆栈。

    __fastcall

    这是stdcall的变体,x86下前两个参数分别用ecx、edx传入,后面和__stdcall一样。

    C++调用约定

    非静态成员函数与标准函数不同,需要this指针,指向被调用的对象,这个由被调用方提供,被调用者平衡堆栈,this指针在ecx中。


    文本搜索快捷键

    ALT+T搜索文本,CTRL+T重复搜索下一个匹配结果。

    ALT+B二进制搜索,CTRL+B重复搜索下一个匹配结果。


    栈指针

    任何时候如果IDA遇到一个函数反汇编语句,检测到栈指针不为0,这时IDA将标注一个错误条件,并将相关指令以红色显示。


    函数块

    创建一个新的函数块,首先选择该块的起始地址,edit->function->append function tail命令,从已定义函数中选择一个。

    结束地址:函数中最后一条指令之后的地址,通常是返回语句之后指令的地址,这个地址不是函数的一部分,而是函数最后一条指令之后的地址。

    保存的寄存器:为调用方保存寄存器所用的字节数。IDA认为保存的寄存器区域放在保存的返回地址顶部,局部变量下面。

    栈指针调整:如果IDA不能更好的调整栈帧,可以ALT+K手动进行调整, 比如未识别stdcall调用方式的函数,调用前后栈帧不一致,可以进行修改。


    数组在反汇编中的表现

    如果在global中

    如果是指定固定数字下标索引,为固定值;如果是变量索引为[eax*x]x为元素大小

    如果在栈中

    如果是指定固定数字下标索引,索引为[ebp+偏移],如果是变量就是[ebp+eax*x]

    如果在堆中

    一般先mov ecx,ebp+heap_array; mov dword ptr [ecx+eax*4]

  • 相关阅读:
    编译java蛋疼的一小时
    最简单的Java Applet程序
    枚举任意进程内核对象句柄的方法
    RvmTranslator7.3.2
    PipeCAD
    Open CASCADE Technology 7.5.0 released
    IsoAlgo 环路处理
    OpenCASCADE STEP Color
    RvmTranslator 3D PDF in Ubuntu
    IsoAlgo Symbols
  • 原文地址:https://www.cnblogs.com/Virus-Faker/p/14704901.html
Copyright © 2011-2022 走看看