我在 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
是我存储了虚拟地址范围Start
和End
它的对象。但是,我找不到任何方法从obj
对象中获取我需要的信息。
编辑:没有必要继续使用 Capstone。如果有解决方案可以通过另一个包获得它,我可以接受。