2010-03-09 64 views
8

专家,我不知道intel x86 machineCode/assemblyCode转换是singleSide还是bothSide?intel机器码到汇编代码问题

指:assemblyCode ---> machineCode和machineCode ---> assemblyCode都可用。

由于x86 machineCode的大小不同(1-15字节),并且操作码在(1-3字节)中有所不同,所以如何确定一个操作码是1字节还是2字节或3字节?

,我从来没有发现的x86指令前缀的例子,如果这里是1字节的前缀,如何判断它的前缀或操作码?

当然,assemblyCode ---> machineCode,助记符+操作数[w/b]的标识可以通过映射某个MappingTable来确定响应machineCode是什么。

但是,当处理是相反的:

{BBBBBBBB,BBBBBBBB,BBBBBBBB,//指令1 BBBBBBBB,BBBBBBBB,BBBBBBBB,BBBBBBBB,BBBBBBBB,BBBBBBBB,//指令2 BBBBBBBB,BBBBBBBB // instruction3 }

----> {BBBBBBBB,BBBBBBBB,BBBBBBBB,BBBBBBBB,BBBBBBBB,BBBBBBBB,BBBBBBBB,BBBBBBBB,BBBBBBBB,BBBBBBBB,BBBBBBBB}

我不知道哪个是显著位或byts以确定多久(什么大小)一个工具ction是。

将任何人告诉我如何确定?(操作码的大小,例如前缀)。 感谢您的帮助。

回答

3

您需要的详细资料在Intel® 64 and IA-32 ArchitecturesSoftware Developer’s Manual Volume 2B: Instruction Set Reference, N-Z。看附录A,它包含了你需要的一切。

+0

谢谢,我会查找它。 – Johnny 2010-03-09 14:47:52

+0

谢谢,我注意到: 表A-2。单字节操作码映射:(00H - F7H) 0F LOCK(前缀) 表A-3。双字节操作码映射:00H - 77H(第一个字节为0FH) 表A-3。双字节操作码映射:08H - 7FH(第一个字节为0FH) 表A-3。双字节操作码映射:80H - F7H(第一个字节为0FH) 表A-3。双字节操作码映射:88H - FFH(第一个字节为0FH) – Johnny 2010-03-09 15:19:22

+0

表A-4。三字节操作码映射:00H - F7H(前两个字节为0F 38H) 表A-4。三字节操作码映射:08H - FFH(前两个字节为0F 38H) 表A-5。三字节操作码映射:00H - F7H(前两个字节为0F 3AH) 表A-5。三字节操作码映射:08H - FFH(前两个字节为0F 3AH) 这是非常有用的,谢谢。 – Johnny 2010-03-09 15:20:20

3

不知道你想要什么来完成,但由于该指令具有可变长度只有这样,才能确保你找回正确的反汇编代码是从已知的起始地址开始。通常反汇编程序从程序的起点开始,然后递归地反汇编所有调用的方法。

但是,这会导致某些代码块未被反汇编,因为它们可以从函数表或类似情况中调用,所以它通常需要人的帮助以查看其余部分是代码还是数据。

+0

...通过elf或其他obj格式来处理此问题吗? – Johnny 2010-03-09 14:40:14

+0

是的,反汇编--->我忘了用这个词。 我认为,如果我可以拆卸,那么我可以组装。 – Johnny 2010-03-09 14:41:46

+0

这可以应用于任何对象格式,但当然处理需要考虑文件的实际格式。 – rslite 2010-03-10 11:17:32

2

因为在x86 machineCode是 大小(1-15字节)而变化,并且在操作码 (1-3字节)变化,如何确定一个操作码 是1字节2字节或或3byte?

指令的大小由指令和地址模式隐式定义,您必须一次检查ISA一个字节,可以并且应该跟随所述字节。

,我从来没有发现的x86指令 前缀的例子,如果这里 1字节前缀,如何判断它是 前缀或操作码?

例如,操作数大小覆盖前缀(66h)始终是前缀。

+0

谢谢,你能写一个完整的前缀+操作码+模式+ r/m + oprands的例子吗? – Johnny 2010-03-09 14:44:17

+0

操作码大小如何? (不是指令), – Johnny 2010-03-09 14:47:26

+0

Intel Instreuction Set手册有大量的操作码编码和mod-reg-r/m字节表。请查阅本文档的第2章,例如: http://www.intel.com/design/intarch/manuals/243191.htm – 2010-03-09 15:52:19