任何面向对象的灵活Java x86反汇编程序库?

任何面向对象的灵活Java x86反汇编程序库?,java,x86,visitor-pattern,disassembly,Java,X86,Visitor Pattern,Disassembly,我正在寻找一个Java x86反汇编程序库,它应该具有以下功能: 反汇编X86代码 用Java类和对象描述X86命令 命令类应该接受具有通用返回值的访问者 所以,如果我有一些代码可以这样反汇编: MOV EAX, EBX CALL 1234 JMP 88 然后库应该为MOV、CALL和JMP创建三个对象。然后,我实现了一个访问者,它可以做各种事情(例如:解释、转换为x64或转换为另一个处理器体系结构的指令) 提前感谢。我不知道有哪一个库是完全用Java实现的。不过,我确实听说过反汇编程序。

我正在寻找一个Java x86反汇编程序库,它应该具有以下功能:

  • 反汇编X86代码
  • 用Java类和对象描述X86命令
  • 命令类应该接受具有通用返回值的访问者
所以,如果我有一些代码可以这样反汇编:

MOV EAX, EBX
CALL 1234
JMP 88
然后库应该为MOV、CALL和JMP创建三个对象。然后,我实现了一个访问者,它可以做各种事情(例如:解释、转换为x64或转换为另一个处理器体系结构的指令)


提前感谢。

我不知道有哪一个库是完全用Java实现的。不过,我确实听说过反汇编程序。它是用C语言开发的,但Java包装器可用于此库。看一看。它可能对你有用。

嗯,不太有用。但是有
Java
绑定,例如

给你。您可以下载本机库。是一个Java代码示例

// Test.java
import capstone.Capstone;

public class Test {

  public static byte [] CODE = { 0x55, 0x48, (byte) 0x8b, 0x05, (byte) 0xb8,
    0x13, 0x00, 0x00 };

  public static void main(String argv[]) {
    Capstone cs = new Capstone(Capstone.CS_ARCH_X86, Capstone.CS_MODE_64);
    Capstone.CsInsn[] allInsn = cs.disasm(CODE, 0x1000);
    for (int i=0; i<allInsn.length; i++)
      System.out.printf("0x%x:\t%s\t%s\n", allInsn[i].address,
          allInsn[i].mnemonic, allInsn[i].opStr);
  }
}
//Test.java
进口顶石。顶石;
公开课考试{
公共静态字节[]代码={0x55,0x48,(字节)0x8b,0x05,(字节)0xb8,
0x13,0x00,0x00};
公共静态void main(字符串argv[]){
顶石cs=新顶石(Capstone.cs_ARCH_X86,Capstone.cs_MODE_64);
Capstone.CsInsn[]allInsn=cs.disasm(代码0x1000);

对于(int i=0;我不相信存在这样的反汇编程序,因为汇编程序是程序化的。因此,如果不重新设计应用程序,就无法将程序化的反汇编程序转换为面向对象的反汇编程序,而这必须手工完成。重点不是将程序化的反汇编程序转换为面向对象的设计。我只想要一个将程序描述为Java obj的库ects和我可以用它们做任何我想做的事情。但是为什么不使用常规的x86反汇编程序来反汇编二进制文件并用Java程序解析输出。然后,您可以简单地读取表示MOV或CALL指令的对象列表中的反汇编代码;或者您可以尝试构建一个树结构,试图通过跳转指令。这将阻止人们进行交互操作,如解释。否则,你是对的。感谢你对distorm的提示。但我看到它有两个缺点:第一,它不是真正面向对象的,解码的指令不接受访问者。第二,它包含作为字符串的操作数,这意味着它们必须重新定义-已解析。为提供详细支持的内容编写访问者抽象应该很容易。真正困难的部分是“解析机器代码”,而distorm似乎擅长于此。此外,在我看来,这不像字符串解析: