DIA数据显示窗口

在将文件加载到IDA中完成初步分析后,需要手动分析。锁业需要对IDA用户界面有充分的了解。
IDA用户界面的基本规则:
IDA不提供撤销功能: 意外操作需要手动恢复到上一步
几乎所有操作都有其对应的菜单项,热键和工具栏按钮: 可以根据需要自定义显示哪些按钮,或增加哪些按钮
IDA提供方便的、基于上写下文的鼠标右键操作菜单: 可以用来执行一些常见操作

IDA主要的数据显示窗口

默认情况下会对文件的初始加载分析阶段创建七个显示窗口,包括三个已经显示的IDA-view window、Functions window、Output window(反汇编窗口、函数窗口、消息输出窗口) 。如果意外关闭窗口,可以通过View->Open Subviews菜单重新打开。

反汇编窗口(IDA-view)

反汇编窗口是操作和分析二进制文件的主要工具。反汇编窗口有两种显示格式:默认的基于图形的视图和面向文本的列表视图。可根据偏好选择,若想用文本列表作为默认汇编视图可用Option->General->IDA Options->Graph->取消Use graph view by default(默认使用图形视图)选项,也可用空格键在两种模式之间切换。

IDA图形视图

图形视图与流程图相似,它将一个函数分解成许多基本块,以生动地显示该函数由一个块到另一个块的控制流程。
基本块:指一个不包含分支,从头执行到尾的最大指令序列。因此,每个基本块都有唯一的入口点(块中第一条指令)和退出点(块中最后一条指令)。基本块中第一条指令通常是分支指令的目标,而最后一条指令则往往是一条分支指令。
在视图中不同颜色箭头代表函数之间各种类型的,根据测试条件,在跳转位置终止的基本块可能生成两种流:Yes边的箭头(执行分支)默认为绿色;No边的箭头(不执行分支)默认为红色;只有一个后继的基本块会利用一个(蓝色箭头)正常边,指向下一个即将执行的块。

:表示某个指令如何继续执行,正常流(普通流)表示指令默认连续执行,跳转流表示当前的指令跳转到(或可能跳转到)某个非连续性位置,调用流表示当前指令会调用一个子进程。

可根据需要,用View->OpenSubviews->Disassembly打开另一个反汇编窗口,用不同类型同时查看不同的部分。但每次只能显示一个函数,而且相应的,图形中隐藏详细的信息。也可以通过Options->General->Disassembly选择后缀为(graph)的选项,可以看到

IDA文本视图

面向文本的反汇编窗口是查看和操作IDA生成的反汇编代码的传统显示窗口,文本显示窗口会显示一个程序的完整反汇编代码清单,只有通过这个窗口才能查看一个二进制文件的数据部分。

在文本视图中,反汇编代码分行显示,虚拟地址默认显示,通常格式是 [区域名称]:[虚拟地址],如图中 .text:004010E0。

图中1.叫做箭头窗口,用于描述函数中的非线性流程,实线表示非条件跳转,虚线箭头代表条件跳转,当出现 一个(条件或非条件)跳转将控制权转交给程序中的某个之前的地址,这时会使用粗线(实线或者虚线),一般出现这类逆向流程,就表示程序中存在循环。

图中2.处的声明,是IDA对函数帧栈布局的最精确估算。IDA会对函数栈指针及函数使用的任何栈帧指针的行为进行仔细分析,从而计算出该函数的帧栈的结构。

帧栈(或激活记录):是指在程序运行时栈中分配的一个内存块,其中包含传递给一个函数的参数和该函数声明的局部变量。帧栈在函数的入口点位置分配,在函数退出时释放。

图中3.为注释,以分号开头属于交叉引用,图中是代码交叉引用(不是数据交叉引用),表示另一个程序将控制权转交给交叉引用注释所在位置的指令。
交叉引用详解

函数窗口

函数窗口用于列举IDA在数据库中识别的每一个函数,如下图所示。

可以通过双击跳转到相应的函数所在的位置。

sub_17EDD2F  .rdata 00000000017EDD2F 000000DE 00000008 00000000 R...B..

由这一行可以得出:函数名为sub_17EDD2F,函数位置在.rdata部分地址为00000000017EDD2F 函数长为336字节(十六进制为DE字节)。

IDA次要的显示窗口

除反汇编、函数和输出窗口外,IDA还在桌面上打开许多选项卡式的窗口。这些窗口用于提供备选或专门的数据库视图,是否使用还是取决于二进制文件的特点和对IDA的熟练程度。

十六进制窗口

可以显示各种格式的代码,默认为十六进制代码,每行显示十六个字节,以及对应的ASCII字符,和反汇编窗口一样,用户也可以同时打开多个十六进制窗口Hex View-1、2、3……默认情况各窗口时同步的,且与反汇编窗口也是相对应的,一个窗口的翻页和选中会在十六进制窗口也同步翻页和突出显示相应内容。在反汇编窗口选中一个项目,十六进制窗口的回应字节也会突出显示。
在十六进制窗口内右键->Synchronize with->取消选中IDA View-A 可以停止上述的同步,右键->Edit 可以转换为十六进制编辑小窗口,右键->Date Format 可以选择不同的显示格式,如1、2、4、8字节十六进制,带签名的十进制,或不带签名的十进制帧数及各种浮点格式。也可通过右键->Columns菜单项更改显示的列数,右键->Text选项打开或关闭文本块。
有时十六进制窗口显示的全是问号,这表示IDA无法识别给定的虚拟地址范围内的值。如果程序中包含一个bss节,就会出现这个情况,通常bss节不占用文件空间,但加载器会扩展这一节,以适应程序的静态存储要求。
bss节: bss节由编译器创建,用于保护程序的所有未初始化的静态变量。因为没有为这些变量指定初始值,所以没有必要在程序文件镜像中为它们分配空间;只需在程序的一个头文件中注明其大小。当程序执行时,加载器会为其分配所需的空间,并将整个数据块的初始值设为0。

导出窗口

导出窗口列出文件的入口点。这包括程序的执行入口点(在程序的头文件部分指定),以及任何由文件的导出给其他文件使用的函数和变量。通常,用户可在共享库(例如Windows DLL文件)中找到导出的函数。导出的项目按名称、虚拟地址和序列(如果可用)排列。对于可执行文件,导出窗口中至少包括一个项目:程序的执行入口点。IDA将这个入口点取名为start。导出窗口中

反汇编基础学习(四)相关推荐

  1. 反汇编基础学习(二)

    参考教材:<IDA Pro权威指南>(第2版) 逆向与汇编工具 一些用于逆向工程的老工具,IDA已经将这些工具的功能整合到它的用户几面中. 分类工具 分辨一个文件时 "文件扩展名 ...

  2. JavaSE基础学习(四)—Java核心类库(下)

    目录 思维导图快速预览全文内容 一.异常机制(重点) 1.基本概念 2.异常分类 3.异常的避免 4.异常的捕获 5.异常的抛出 6.自定义异常 二.File类(重点) 1. 基本概念 2.常用方法 ...

  3. python基础学习四:合并Excel表格小程序

    import xlrd import xlsxwriter import os #在原有的基础上,对程序进行完善:因为大多数合并的表格,他们的格式都是一样的,就拿我自己来说, #把很多同学填写的信息进 ...

  4. 反汇编基础学习(一)

    参考教材:<IDA Pro权威指南>(第2版) 编程语言 第一代语言:0和1,十六进制码,也称为机器语言,字节码,机器语言程序常被称为二进制文件 第二代语言:汇编语言,助记符对应具体模式的 ...

  5. bootstrap基础学习四篇

    bootstrap代码 Bootstrap 允许两种方式显示代码: 第一种是 <code> 标签.如果您想要内联显示代码,那么您应该使用 <code> 标签. 第二种是 < ...

  6. Python基础学习四 函数

    1.内置函数 Python内置了很多有用的函数,是可以直接调用的. 参考链接:https://docs.python.org/3/library/functions.html 调用函数的时候,如果传入 ...

  7. 程序开发基础学习四(boost::signal2 函数学习)

    在游戏编程中,新的策划需求总是在迭代不停......,对于游戏程序员肯定深有感触吧,遇到这种情况咱只能小小的抱怨下,活还得干.尤其是遇到耦合到很多类的时候,要是直接实现不加抽象的话,那咱的代码就要被拆 ...

  8. Linux基础学习四:Linux常用的命令(非常详细)

    常用的命令  文档帮助命令 help 用法: 命令 --help 示例: dhclient --help man 用法: man 命令 示例:man dhclient空格:下一页b:上一页q:退出   ...

  9. Redis基础学习(四)—Redis的持久化

    一.概述 Redis的强大性能很大程度上都是因为数据时存在内存中的,然而当Redis重启时,所有存储在内存中的数据将会丢失,所以我们要将内存中的数据持久化. Redis支持两种数据持久化的方式: RD ...

最新文章

  1. 每日算法练习之括号配对
  2. android java file 清理垃圾获取文件大小 删除文件等操作
  3. 全球及中国有机肥料行业投资价值与营销品牌战略报告2022版
  4. 稳定云服务器出租_云主机与独立服务器有哪些不同
  5. ES6新特性之map和reduce方法的使用
  6. 计算机游戏和传统游戏的区别是什么,电竞显示器与普通显示器有什么区别-电脑自学网...
  7. DAHDI与Zaptel
  8. python 3d渲染_python老司机带你玩玩炫酷的3D渲染,酷毙了!
  9. Docker常见问题总结
  10. 前端学习-css(一)
  11. MapTask工作机制图解
  12. 个人开发者都可享受 无服务器计算颠覆收费
  13. 天九共享全方位孵化增添活力 助力独角兽企业开辟更多新大陆
  14. 程序员真的干到35就干不动了吗?
  15. java徽章_java
  16. pytest框架中setup、teardown和setup_class、teardown_class
  17. 1 C C++初识
  18. IPFS发展前景真有说的那么好么?
  19. 移动开发者大会 -- 后感
  20. 7-4 身份证号码最后一位 (100分)

热门文章

  1. 人们为什么玩游戏———节选自《游戏设计原理与实践》
  2. 时间序列的ARIMA预测分析
  3. PHP输出星座,[转]一个最简的js和php通过月日获取星座的代码
  4. Linux操作系统管理公共基础——积累
  5. linux恢复rm命令,Linux系统下不小心使用rm命令删除的文件能有办法恢復吗?
  6. 判断101-200之间有多少个素数,并输出所有素数
  7. 从知识到财富:为何知识管理掀起了企业管理的新趋势?
  8. 国王将金币作为工资,发放给忠诚的骑士。第1天,骑士收到一枚金币;之后两天(第2天和第3天)里,每天收到两枚金
  9. 字符设备驱动开发的流程
  10. Halcon 中mura缺陷检测