zoukankan      html  css  js  c++  java
  • IDA Pro 权威指南学习笔记(六)

    十六进制窗口

    IDA 十六进制窗口可以配置为显示各种格式,并可作为十六进制编辑器使用

    默认情况下,十六进制窗口显示程序内容和列表的标准十六进制代码,每行显示 16 个字节,以及其对应的 ASCII 字符

    和在反汇编窗口中一样,用户也可以同时打开几个十六进制窗口

    第一个十六进制窗口叫做 Hex View-A,第二个十六进制窗口叫做 Hex View-B,接下来的窗口叫做 Hex View-C,依次类推

    默认情况下,第一个十六进制窗口会与第一个反汇编窗口同步

    如果一个反汇编窗口与一个十六进制窗口同步,在一个窗口中滚动鼠标,另一个窗口也会滚动到相同的位置(同一个虚拟地址)

    如果在反汇编窗口中选中一个项目,十六进制窗口中的对应字节也将突出显示

    在反汇编窗口中,光标指向地址 0040E60D,这是一个 mov 指令,在十六进制窗口中,构成这个指令的全部 3 个字节均突出显示

    右击十六进制窗口的任何位置,出现十六进制窗口的上下文菜单

    使用这个菜单,可以指定与某个特殊的十六进制窗口同步的反汇编窗口(如果有的话)

    如果取消选中同步选项,那么在滚动十六进制窗口时,将不会有任何反汇编窗口随之滚动

    择 Edit 菜单项可将十六进制窗口转变为十六进制编辑器,完成编辑后,你必须提交或取消更改才能返回查看模式

    可以使用 Data Format 菜单项选择各种显示格式,如 1、2、4、8 字节十六进制,带签名的十进制或不带签名的十进制整数及各种浮点格式

    可以使用 Columns 菜单项更改显示的列数

    使用 Text 选项打开或关闭文本块

    如果十六进制窗口中显示的是问号,这表示 IDA 无法识别给定的虚拟地址范围内的值,如果程序中包含一个 bss 节,就会出现这种情况

    通常,bss 节并不占用文件的空间,但加载器会扩展这一节,以适应程序的静态存储要求

    bss 节由编译器创建,用于保存程序的所有未初始化的静态变量

    既然没有为这些变量指定初始值,就没有必要在程序的文件镜像中为它们分配空间,只需在程序的一个头文件中注明它的大小

    当程序执行时,加载器会为其分配所需的空间,并将整个数据块的初始值设为 0

    导出窗口

    导出窗口列出文件的入口点

    这些入口点包括程序的执行入口点(在程序的文件头部分指定),以及任何由文件导出给其他文件使用的函数和变量

    通常,用户可在共享库(如 Windows DLL 文件)中找到导出的函数

    导出的项目按名称、虚拟地址和序数(如果可用)排列

    共享库可能会使用导出序数,以方便用户通过序数而非名称访问函数

    使用序数可以加快地址查询速度,并允许程序员隐藏函数的名称

    Windows DLL 即使用导出序数

    对于可执行文件,导出窗口中至少包含一个项目:程序的执行入口点,IDA 将这个入口点取名为 start

    与许多其他 IDA 窗口一样,双击导出窗口中的一个条目,IDA 将会跳转到反汇编窗口中与该项目有关的地址

    导出窗口提供与 objdump (-T) 、 readelf (-s) 和 dumpbin (/EXPORTS) 等命令行工具类似的功能

    导入窗口

    导入窗口的功能与导出窗口的功能正好相反

    导入窗口列出由被分析的二进制文件导入的所有函数

    只有在二进制文件使用共享库时,IDA 才需要用到导入窗口

    静态链接的二进制文件不存在外部依赖关系,因此不需要导入其他内容

    导入窗口中的每个条目列出一个导入项目(函数或数据)的名称,以及包含该项目的库的名称

    由于被导入的函数的代码位于共享库中,窗口中每个条目列出的地址为相关导入表条目的虚拟地址

    双击第一个条目,IDA 将跳转到反汇编窗口的 00412168 地址处

    在十六进制窗口中,这个内存位置的内容显示为 ?? ?? ?? ??

    因为 IDA 是一种静态分析工具,它无法获知程序在执行时会在这个内存位置输入什么地址

    导入窗口还提供与 objdump (-T) 、 readelf (-s) 和 dumpbin (/IMPORTS) 等命令行工具类似的功能

    导入窗口仅显示二进制文件想要动态加载器自动处理的符号,二进制文件选择使用 dlopen/dlsym 或 LoadLibrary/GetProcAddress 等机制自行加载的符号将不会在导入窗口中显示

    结构体窗口

    结构体窗口用于显示 IDA 决定在一个二进制文件中使用的任何复杂的数据结构(如 C 结构体和联合)的布局

    在分析阶段,IDA 会查询它的函数类型签名扩展库,设法将函数的参数类型与程序使用的内存匹配起来

    双击数据结构的名称,IDA 将展开该结构,这样你就可以查看该结构的详细布局,包括每个字段的名称和大小

    结构体窗口的两个主要用途包括:

    为标准数据结构的布局提供现成的参考;

    提供一种方法,在发现程序使用的自定义数据结构时,帮助创建自己的、可用作内存布局模板的数据结构

    枚举窗口

    如果 IDA 检测到标准枚举数据类型(C  enum ),它将在枚举窗口中列出该数据类型

    可以使用枚举来代替整数常量,提高反汇编代码的可读性

    在枚举窗口中也可以定义自己的枚举类型,并将其用在经过反汇编的二进制代码中

  • 相关阅读:
    springboot启动后执行某些动作
    Virtualbox的nat网络
    xshell6
    day01 K8S
    Nginx的日志文件切割
    virtualbox磁盘空间大小调整
    装修柜子木台面
    mybatis 批量in 多个字段写法
    jenkins shell常用配置
    activiti工作流引擎数据库表结构
  • 原文地址:https://www.cnblogs.com/sch01ar/p/9476340.html
Copyright © 2011-2022 走看看