1个不稳定版本
0.0.1 | 2022年12月31日 |
---|
#31 in #disassembly
19KB
347 行
yaxpeax-eval
yaxpeax-eval
是提供yaxeval
的仓库,这是一个用于在退出时执行机器代码并报告状态的工具。
目前,yaxeval
通过在一个线程上执行提供的机器代码并在本地物理处理器上运行,实现其功能。有一些与体系结构相关的状态设置和报告的粘合代码。这意味着yaxeval
支持或接近支持你运行它的任何物理处理器。
我感兴趣的是使用qemu-user作为替代执行后端进行跨平台仿真。yaxeval
应该能够通过使用qemu的gdbserver以相同的方式用于设置和报告。
使用方法
如果你只想构建并使用它,cargo install yaxpeax-eval
应该能让你开始。否则,克隆此仓库并执行cargo build
同样有效。yaxeval <x86 机器代码>
是一个好的起点
yaxpeax-eval> ./target/release/yaxeval b878563412
loaded code...
00007f774b497000: mov eax, 0x12345678
00007f774b497005: 🏁 (int 0x3)
running...
rax: 0000000000000000
to -> 0000000012345678
rip: 00007f774b497000
to -> 00007f774b497006
初始寄存器状态通常是零,除了默认指向一个不受限制的mmap
可以找到的地址的rip
。
初始寄存器值,包括rip
,可以明确指定
yaxpeax-eval> ./target/release/yaxeval --regs rax=4,rcx=5,rip=0x123456789a,eflags=0x246 03c133c9
loaded code...
000000123456789a: add eax, ecx
000000123456789c: xor ecx, ecx
000000123456789e: 🏁 (int 0x3)
running...
rax: 0000000000000004
to -> 0000000000000009
rcx: 0000000000000005
to -> 0000000000000000
rip: 000000123456789a
to -> 000000123456789f
如果提供的代码灾难性地崩溃,yaxeval
将尝试说一些关于发生的事情
yaxpeax-eval> ./target/release/yaxeval --regs rax=4,rcx=5,rip=0x123456789a,eflags=0x246 0000
loaded code...
000000123456789a: add byte [rax], al
000000123456789c: 🏁 (int 0x3)
running...
eflags: 00000246
to -> 00010246
sigsegv at unexpected address: 000000123456789a
期望
- 接受一些配置以映射除了隐式初始化的代码区域以外的内存区域
- 对机器友好的输入/输出格式
- 单步执行提供的代码的模式?
依赖关系
~14MB
~211K SLoC