1

我在 C# 中有一个脚本,它使用Gee.Capstone包来自动反汇编文件。我不熟悉整个概念,所以我只是尝试根据在线教程做我需要的事情。

我有一些范围格式的虚拟地址。例如:0x0122FFB0-0x01230028

当我使用另一个 GUI(例如 Cutter)反汇编文件时,我得到类似这样的东西

0x0122ffb0      stp x20, x19, [sp, -0x20]!
0x0122ffb4      stp x29, x30, [sp, 0x10]
0x0122ffb8      add x29, sp, 0x10
0x0122ffbc      ldr x8, [x0, 8]    ; fcn.00000008
0x0122ffc0      mov x19, x0
0x0122ffc4      orr w1, wzr, 2
0x0122ffc8      mov x2, xzr
0x0122ffcc      ldr x20, [x8]
0x0122ffd0      mov x0, x20
0x0122ffd4      bl fcn.0304bf80
0x0122ffd8      mov x0, x20
.....
0x0122fffc      ldr x8, [x19, 8]   ; fcn.00000008

我想从中获取值 2 orr w1, wzr, 2。一般来说,我想要的值总是采用 的格式orr w1, wzr X,但在两个地址的范围内并不总是以相同的顺序排列。

假设我有一个包含所有范围的列表,有没有办法识别我需要的行并获取X值?

我离得越近就是这个

private static CapstoneX86Disassembler asm = CapstoneX86Disassembler.CreateX86Disassembler(X86DisassembleMode.Bit64);
var obj = asm.Disassemble(att.GetMethodBody(), (long)att.VirtualAddress.Start);

其中att是我存储了虚拟地址范围StartEnd它的对象。但是,我找不到任何方法从obj对象中获取我需要的信息。

编辑:没有必要继续使用 Capstone。如果有解决方案可以通过另一个包获得它,我可以接受。

4

0 回答 0