任何面向对象的灵活Java x86反汇编程序库?
我正在寻找一个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实现的。不过,我确实听说过反汇编程序。
- 反汇编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似乎擅长于此。此外,在我看来,这不像字符串解析: