首页 > 其他分享 >【IDA PRO权威指南】二

【IDA PRO权威指南】二

时间:2023-04-09 19:46:40浏览次数:41  
标签:指南 调用 函数 PRO 局部变量 注释 名称 IDA

基本ida导航

跳转到地址
jump to address对话框

导航历史记录
jump-jump to previous position可以跳转到前一个位置
jump to next position跳转到后一个位置
栈帧
栈帧是在程序运行时栈中分配的内存块,专门用于特定的函数调用。也通过栈帧(也称激活记录)使得对函数参数和局部变量进行分配和释放的过程对程序员透明。
调用一个函数的详细步骤:

  • 将一个函数所需的所有参数放到其所用的调用约定指定的位置。如果参数被放在运行时栈上,可能会使栈指针发生改变。
  • 调用方将控制权转交给被调用的函数。返回地址被保存到程序栈或者寄存器当中。
  • 必要的话会配置一个栈指针。
  • 被调用的函数为他需要的任何局部变量分配空间。
  • 被调用的函数执行器操作。
  • 完成其操作后释放局部变量的空间。
  • 控制权返回给调用方。
    调用约定
    与之前在C++primer出现的相同。
    也就是从左到右传参还是从右到左传参。
    局部变量布局
    布局与调用协定无关,且不存在规定局部变量布局的约定。
    栈帧示例



    将y压入栈,可以通过栈帧来计算数据存在的地址。还要注意是ebp还是esp。
    IDA栈视图
    如果发现如下指令

    就知道第一个参数被加载到了eax寄存器当中。
    为了了解不同栈视图。


    其中

    是一个简要的摘要简要栈视图。列出了呗直接引用的每一个变量。而IDA会根据返回地址的位置为变量取名。局部变量位于被保存的返回地址之上,而函数参数位于被保存的返回地址之下。以var为前缀也就是

    函数参数名以arg为前缀也就是

    其实还有一个arg_0未列出,其实是函数没有引用参数a所以不在摘要栈视图当中列出。
    也可以选择替代这种表达方式,换成十六进制十进制等等


    还有一个详细栈视图如下

    搜索数据库
    有两种通用搜索功能值得详细讨论,文本搜索和二进制搜索。
    文本搜索

    需要详细的完整的词
    二进制搜索
    对于搜索特定的二进制内容,应使用这个。
    儒要搜索一个十六进制字节序列,应搜索两位一组的十六进制值的列表
    名称与命名
    在分析一个程序的时候,操作反汇编代码清淡的最主要和最常用使用的一个方法就是将默认名称更改为更有意义的名称。只需要单击所需要更改的名称,按N打开更名对话框进行更改。
    参数和局部变量
    栈内重命名变量

    如图已更改

    他会在上下文的每一个旧名称处更改。
    已命名的位置
    更之前大抵相同,但按完n后不太一样
  1. localnames仅限于当前函数
  2. include in names list包含在名称列表中
  3. public name公共名称
  4. autogenerated name自动生成
  5. weak name弱名称 没找到相同名称的公共符号重写时采用弱符号。
  6. create name anyway就是即时一个函数当中有两个相同的名称,你的重命名操作还要继续就勾选这个。
    寄存器名称
    对寄存器重命名,但实际使用的时候确是引用。
    IDA的注释

    常规注释
    可重复注释 会出现很多地方
    在前注释和在后注释
    函数注释

    一般在这里的位置
    基本代码转换
    IDA提供的包括
  • 将数据转换为代码;
  • 将代码转换为数据;
  • 指定一个指令序列为函数;
  • 更改现有函数的起始或结束地址;
  • 更改指令操作数的显示格式。
    代码显示选项
    可以为每个反汇编行生成的信息数量自定义,每一个反汇编行都可以视为一个有许多部分组成的集合。

    line prefixes行前缀
    stack pointer栈指针具体如下

    comments and repeatable comments 注释和可重复注释
    auto comments自动注释
    bad instructions bad marks无效指令bad标记
    numbers of opcode bytes操作码字节数,如果过短如下就会显示不全

    格式化指令操作数
    可以重新格式化成不同进制。
    操纵函数
    新增函数
    edit functions create function新建函数
    删除函数
    函数块
    如下 会有一个头

    双击①可以迅速到达该函数块

    函数特性
    ida为函数提供了许多特性

标签:指南,调用,函数,PRO,局部变量,注释,名称,IDA
From: https://www.cnblogs.com/Corax0o0/p/17300879.html

相关文章

  • py深度学习指南
    常用函数获取当前运行目录(类似c++)importsyscurent_dir=sys.argv[0]模型保存与读取importtorch#保存模型步骤torch.save(model,'net.pth')#保存整个神经网络的模型结构以及参数torch.save(model,'net.pkl')#同上torch.save(model.state_dict(),'net......
  • VUE-Antd开发,validate规则校验第一次为空,后面无论怎么输入都显示不可为空
    问题描述场景是修改弹窗,给数据赋值,其中数据有String和Array第一次操作多选框(数据类型是Array)输入为空并在输入框外点击,显示不可为空。之后无论怎么输入都显示不可为空。(当你控制台输出校验value时,会发现里面的值永远是第一次操作的数据,而非为空)可能原因1️⃣rules定义出错......
  • Pro Android学习笔记(九):了解Content Provider(下下)
    Contentprovider作为信息的读出,比较常见的还有文件的读写,最基础的就是二进制文件的的读写,例如img文件,音频文件的读写。在数据库中存放了该文件的路径,我们可以通过ContentProvider获得InputSream和OutputStream,实现对文件的操作。ProAndroid4.0提及有关内容,但语焉不详,可同时参考h......
  • Pro Android学习笔记(八):了解Content Provider(下中)
    在之前提供了小例子BookProvider,我们回过头看看如何将通过该ContentProvider进行数据的读取。(1)增加privatevoidaddBook(Stringname,Stringisbn,Stringauthor){/*从ContentProvider的insert()方法的参数可以看到,通过ContentValues来进行数据的传递。ContentValues是k......
  • Android学习笔记(四九):通过Content Provider访问数据
    在上次笔记中,我们编写了自己的Provider,这次笔记,我们将通过ContentProvider的Uri接口对数据进行访问,重写Android学习笔记(四二)中例子。在这里我们不在充分描述相关UI如何编写,可以到笔记(四二)中详细查看,重点讲述如何实现数据的访问。读取信息读取信息方式,在笔记(四七)中已经介绍,代码如下......
  • Android学习笔记(四八):提供自己的Content Provider
    在上一次的学习中,采用了原生的内容提供者Contact,Contact有多层映射关系,比较复杂,并非作为小例子的好选择,在本次学习中,我们将学习如何建立ContentProvider,并通过Uri进行增删改查。如果应用的数据只需自己使用,并不需要contentprovider,相反避免这样做,可直接访问数据;但是若希望数据可......
  • Pro Android学习笔记(四六):Dialog(3):对话框弹对话框
    提示框的按钮Help,将触发弹出新的帮助提示框。帮助提示框的实现帮助提示框的实现很简单,利用重写onCreateView()的方式,点击按钮是执行dismiss(),关闭对话框即可。代码不在此重复。dialogfragment的关闭有两种方式,一种是在dialogfragment中直接执行dismiss(),我们来看看DialogFragmen......
  • Pro Android学习笔记(四五):Dialog(2):DialogFragment
    DialogFragment的实例newInstance()已经在上一次学习笔记中实现。我们创建dialog的UI,可以通过重写DialogFragment的两个函数当中的一个来实现,这两个函数是onCreateView()和onCreateDialog(),前者返回view,后者返回dialog,如同通过AlertDialog.Builder构造一样。重写onCreateView()重写......
  • Pro Android学习笔记(四四):Dialog(1):触发Dialog
    Android提供alert、prompt、pick-list,单选、多选,progress、time-picker和date-picker对话框,并提供自定义的dialog。在Android3.0后,dialog基于fragment,并对之前版本提供兼容支持库,也就是说对于开发者而言,dialog是基于DialogFragment的,但此时需要在应用中加入相关的兼容库。和Window......
  • Pro Android学习笔记(二六):用户界面和控制(14):RelativeLayout
    相对布局:RelativeLayoutRelativeLayout也是非常常用的布局,能够精确对控件的位置进行网格对齐,可以设置在控件与其他控件的相对位置,以及控件在容器中的位置。缺省控件的位置为最上面还最左边。下面结合一个例子来进行解说。<?xmlversinotallow="1.0"encoding="utf-8"?><Relativ......