#disassembly #disassembler #machine #eval #tool #state #setup

app yaxpeax-eval

机器代码批量评估工具

1个不稳定版本

0.0.1 2022年12月31日

#31 in #disassembly

0BSD许可证

19KB
347

yaxpeax-eval

crate

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