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://www.gnu.org/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