2个稳定版本
使用旧Rust 2015
| 2.0.1 | 2019年2月6日 |
|---|---|
| 1.0.0 | 2019年1月3日 |
#1622 in 数据结构
360KB
7K SLoC
包含 (DOS可执行文件, 67KB) tests/data/test.exe, (Mach-o可执行文件, 9KB) tests/data/deadbeef.mach, (ELF可执行文件/库, 7KB) tests/data/dynamic-32, (Mach-o库, 9KB) tests/data/libbeef.dylib
p8n-types
表示二进制程序的基本类型。是Panopticon的一部分。文档托管在 docs.rs。
用法
# Cargo.toml
[dependencies]
p8n-types = "2.0.1"
许可
本项目受以下许可协议保护
- GNU通用公共许可证,版本2.1或更高版本,(LICENSE 或 https://gnu.ac.cn/licenses/old-licenses/lgpl-2.1.en.html)。
lib.rs:
用于反汇编和分析二进制代码的库。
panopticon crate 实现了结构来模拟程序的内存表示,包括其控制流、调用图和内存映射。以下是最重要的类型及其交互方式:
Project
├── Region
│ └── Layer
└── Program
└── Function
└── BasicBlock
└── Mnemonic
└── Statement
Program、Function、BasicBlock 和 Statement 类型模拟了代码的行为。而 Region 和 Layer 类型表示了程序在内存中的布局。
代码
潘多拉模型将代码视为程序集合。每个Program由函数组成。一个Function是一个图,节点代表指令序列,边代表跳转。这些指令序列是BasicBlock,包含一个Mnemonic列表。每个Mnemonic的意义在[RREIL][1]语言中有描述。每个助记符包括实现它的Statement序列。
潘多拉允许每个项目包含多个程序。例如,想象一个调用用C编写的本地DLL的C#应用程序。这样的应用程序将有两个程序实例。一个用于应用程序C#部分的CIL代码,另一个用于DLL内的AMD64对象代码。
使用Disassembler和CodeGen将Mnemonic填充到Function结构中。
数据
使用Region、Layer和Cell类型对可执行文件的内存布局进行建模。所有数据都组织到Region中。每个Region是一个从0到n编号的Cell数组。每个Cell要么未定义,要么具有介于0到255(包括两者)之间的值。Region是只读的。更改其内容是通过应用Layer实例来完成的。一个Layer读取Region的一部分或另一个Layer,并返回一个新的Cell数组。例如,Layer可以解密Region的一部分或用新的替换单个Cell。
在正常操作中,每个内存地址空间有一个Region,冯·诺依曼机器有两个,哈佛架构有两个。其他用途包括在Cell数组上应用函数,其中结果大小不等于输入(例如解压缩可执行映像的一部分)。
依赖项
~9MB
~155K SLoC