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]

  • 相关阅读:
    mysql零碎问题合集
    mysql 纵表转横表 需要用join不能直接where连接
    eclipse导出可执行jar包 报main function not found错误
    shell脚本将mysql查询结果制作成csv格式
    linux shell中把句子中的单词提取作为变量值 主要是使用了数组
    linux下文件字符编码转换
    Banner使用
    recyclerview的博客网址需要的权限
    okhttp权限
    Okhttp代码
  • 原文地址:https://www.cnblogs.com/Virus-Faker/p/14704901.html
Copyright © 2011-2022 走看看