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]

  • 相关阅读:
    Android应用程序组件Content Provider在应用程序之间共享数据的原理分析
    Android录制声音(二)录音输输出格式
    Firemacs:像垄断 Emacs 一样垄断 Firefox
    超棒的 KDE 面板小序次-Kirocker Music Display
    特征化设置你的linux环境
    软响铃 ── 把 beep 换成音乐
    简化 Picasa 图片上传
    Moonlight:Linux 平台上的 Silverlight
    Wine 0.9.39
    本钱与linux
  • 原文地址:https://www.cnblogs.com/Virus-Faker/p/14704901.html
Copyright © 2011-2022 走看看