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

【IDA PRO权威指南】四

时间:2023-04-11 10:11:32浏览次数:34  
标签:指南 调用 函数 交叉 PRO 指令 引用 跳转 IDA

IDA TIL文件

IDA当中所有数据类型和函数原型信息都存储在TIL文件中。

加载新的TIL文件

在types中按下insert,选择要加载的til文件,该文件包含的所有结构体定义都被添加到标准结构体列表当中。

共享TIL文件

前面提过,idb实际上是一个归档文件用于保存不使用的数据库组件,而til文件是它的组件文件之一。有两种共享方法,第一种不太正规,就是将til文件由打开的数据库复制到另外一个目录当中,再通过types窗口,在任何数据库打开这个til文件。第二种是一个正式的方法,从数据库当中提取出自定义类型信息,生成一段idc脚本,用于在任何其他数据中重建自定义结构体。这种方法只能存储structures窗口列出的结构体,并不存储通过解析C头文件得到的结构体。

C++逆向工程基础

需要涉及几个重要问题和visualC++和GUN的g++当中的一些差异。

this指针


三次调用member_func分别接受&object1,&object2,&object3三个值,同时最好把this看成所有非静态类成员函数的第一个隐藏函数。visual把this传递到ECX寄存器当中,GUN把this看做非静态成员函数的第一个参数。
从逆向来看,如果一个地址转移到ECX寄存器意味着1,文件由vis编译,并且这个函数是一个成员函数,如果同一个地址被传递给两个或更多,则这些函数全部属于同一个类层次结构。
g++代码较少调用成员函数。但是如果一个函数没有八支针作为第一个参数,他必定不是成员函数。

虚函数和虚表

虚表:包含每个虚函数的类的表
其中包含类中每一个虚函数的指针,这些成员就是虚表指针,是类的第一个数据成员。
subclass是baseclass的一个子类。而subclass拥有五个虚函数。看似baseclass拥有两个数据成员,subclass拥有三个。但前面提到任何包含虚函数的类也包含一个虚表指针。

subclass中的虚表指针自baseclass继承而来。

对象生命周期

对于全局和静态分配的对象来讲,构造函数在程序启动并进入main函数之前被调用。栈分配的对象的构造函数在对象进入声明对象的函数作用域中被调用。如果对象在程序堆中动态分配,则创建对象分为两步,第一步调用new操作符分配对象的内存。第二部调用构造函数初始化。visual在调用构造函数前确保new结果不为空值。

析构函数还基本上按相反的顺序调用。

名称改变

用于区分重载函数的机制。是编译器实现细节,并不属于c++语言规范。

运行时类型识别RTTI

同样也是一个编译器实现细节。

继承关系

主要讨论缺少RTTI信息时候用的技巧来确定C++类中的继承行为。一些思路:

.
.

交叉引用和绘图功能

交叉引用可以帮助了解代码哪些部分引用了哪里的什么指令什么数据。

交叉引用

交叉引用xref,可以看一个有向图。

是这样显示交叉引用信息

这里的显示格式可以告诉我们它指向的是main函数当中提出的第0x2A(42)字节,而一个箭头标示引用位置的相对位置。

代码交叉引用

表示一条指令将控制权转交给另一条指令。转交控制权方式称之为流。有三种基本流:普通流,跳转流和调用流。

普通流( ordinary flow)是- -种最简单的流,它表示由一条指令到另一条指令的顺序流。 这
是所有非分支指令( 如ADD)的默认执行流。除了指令在反汇编代码清单中的显示顺序外,正常
流没有其他特殊的显示标志。如果指令A有一一个指向指令B的普通流,那么,在反汇编代码清
单中,指令B会紧跟在指令A后面显示。在代码清单9-1中,除➊、❷两处的指令外,其他每一
条指令都有一一个普通流指向紧跟在它们后面的指令。

指令用于调用函数,如❸处的x86ca11指令,它分配到一个调用流( call flow),表示控制权
被转交给目标函数。多数情况下,ca11指令也分配到-个普通流,因为大多数函数会返回到ca1l
之后的位置。如果IDA认为某个函数并不返回(在分析阶段确定),那么,在调用该函数时,它
就不会为该函数分配普通流。调用流通过在目标函数(流的目的地址)处显示交叉引用来表示。
ca1lflow函数的反汇编代码清单如下所示:

每个无条件分支指令和条件分支指令将分配到-个跳转流( jump flow )。条件分支还分配到
普通流,以在不进人分支时对流进行控制。无条件分支并没有相关的普通流,因为它总会进入分
支。❺处的虚线表示相邻的两条指令之间并不存在普通流。跳转流与跳转目标位置显示的跳转式
交叉引用有关,如◎处所示。与调用式交叉引用一样,跳转交叉引用显示引用位置(跳转的源头)
的地址。跳转交叉引用使用后缀j (看做是Jump )。

数据交叉引用

有写对他的读取权限

  1. 读取交叉引用
  2. 写入交叉引用
  3. 偏移量交叉引用
    其中偏移量交叉引用,表示引用的某个位置的地址。虚函数当中常用。

交叉引用列表

通过view open subviews cross-reference打开。

第二种方法是突出显示一个感兴趣的名称,在菜单中jump jump to xref打开一个对话框,列出了引用选中符号的每个位置

函数调用

有一种交叉引用列表专门处理函数调用
,窗口上半部分列出了所有调用函数位置,下半部分列出当前函数做出的全部调用

绘图

IDA外部图形(第三方)

早期使用wingraph32捆绑图形应用程序实现。但缺乏灵活性。
后期引入集成化反汇编图形模式。
没细学
.
.
.

IDA多面孔(多平台)

MS-DOS控制台应用程序。

控制台模式IDA

界面基本保持一致

控制台模式的共同特性

标签:指南,调用,函数,交叉,PRO,指令,引用,跳转,IDA
From: https://www.cnblogs.com/Corax0o0/p/17305268.html

相关文章

  • Ambari+Bigtop大数据平台安装部署指南(Centos7)一
    前言安装部署分为以下五个大步骤1.资源准备2.操作系统配置3.数据库配置4.ambari配置5.bigtop组件安装必要说明all表示全部主机都要执行server表示ambari-server安装的主机执行${key}表示需要根据实际情况修改的变量,例如{server.ip}应替换成server所在主机的ip资源准备需要准备3......
  • SpringSecurity源码-构建ProviderManager
    简介在构建WenSecurity执行生命周期AbstractConfiguredSecurityBuilder#doBuild()方法中的init(),会执行到WebSecurityConfigurerAdapter#init(WebSecurityweb)方法,会去创建HttpSecurity。在创建HttpSecurity时调用authenticationManager()构建ProviderManager。 WebSecurityCo......
  • 57、K8S-监控机制-Prometheus-PromQL基础-运算符、聚合、功能函数
    Kubernetes学习目录1、数据基础1.1、时间序列1.1.1、介绍时间序列数据:按照时间顺序记录系统、设备状态变化的数据,每个数据称为一个样本;数据采集以特定的时间周期进行,因而,随着时间流逝,将这些样本数据记录下来,将生成一个离散的样本数据序列;该序列也称为向量(Vector);而将多个序......
  • [已解决] 记录一次排查错误Invalid character found in the HTTP protocol
    环境Tomcat8.x报错InvalidcharacterfoundintheHTTPprotocol[HTTP/1.1Connection:]分析查看localhost_access_log.txt发现:HEAD/400都是HEAD请求,且返回都是400,毕竟HTTP协议的字符不正确。调研Howtosolve"InvalidcharacterfoundintheHTTPprotocol[......
  • 记录-html-docs-js避坑指南
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言我们公司目前在做基于tiptap的在线协同文档,最近需要做导出pdf、word需求。导出word文档使用的是html-docx-js-typescript,是用typescript重写了一下html-docx-js,可以看到最近的提交记录是2016年,貌似已......
  • kube-proxy代替方案 Cilium
    CiliumCilium是一个开源的网络安全和服务发现解决方案,它基于Linux内核的eBPF(extendedBerkeleyPacketFilter)技术,提供了一种高效、灵活、可扩展的网络隔离和安全机制。网络隔离:Cilium通过eBPF技术实现了高效的包过滤和转发,可以在网络层面为不同的服务提供隔离和访问控制机......
  • 56、K8S-监控机制-Prometheus-配置解析、标签管理
    Kubernetes学习目录1、配置文件1.1、配置简介1.1.1、简介Prometheus可以通过命令行或者配置文件的方式对服务进行配置。一般情况下,命令行方式一般用于不可变的系统参数配置,例如存储位置、要保留在磁盘和内存中的数据量等;配置文件用于定义与数据动态获取相关的配置选项和文件......
  • postgresSQL Extended Query执行过程和sharding-proxy的处理
    pgExtendedQueryPostgreSQL:Documentation:15:55.2. MessageFlow多个阶段,可复用Parse→DESCRIBEstatement→SYNCParse解析,将sql文本字符串,解析成namedpreparedStatement语句(生命周期随session)占位符和参数类型Describe获取元数据,返回pst参数描述......
  • 3d打印机 marlin固件 EEPROM Version ERROR 版本错误
    问题描述:刷入新固件后,提示EEPROMVersionERROR  有两个选项(Restart)(Ingore)选择Ingore可以继续正常使用 问题原因:多为marlin版本和EEPROM版本不一致导致,开机时通过pronterface链接打印机,可以看到如下提示:  解决方法:通过Prontface依次发送下......
  • 第1章 C#和.NET简介 (Code like pro in C#)
    在本书的第一部分,我们将简要介绍C#语言,并讨论它的一些特性。第1章介绍了什么是C#和.NET,以及为什么您会(也不会)在项目中使用它们。第2章深入探讨了.NET的各种迭代,并在编译过程中采用了C#方法,在编译过程的每一个主要步骤都停止下来。尽管这部分确实是本书的介绍,但它仍然为熟悉C#的......