MOV AL,4
的8086指令的编码是c604
吗?
另外,我如何编码MOV AX, DS:5678h
和SUB BX,[Di+6]
感谢您的帮助。
答案 0 :(得分:2)
MOV AL,4
已编码为B004
。
MOV AX, DS:5678h
是invalid combination of opcode and operands
。这不会编译。
SUB BX, [DI+6]
已编码为2B5D06
。
对于那些感兴趣的人,这是如何解码编译的16位汇编程序。
......这可能是一个很好的维基。
首先:这是在Mac OS X上完成的,但任何Linux发行版都可以使用所描述的工具。
在x86(8086)汇编语言以及许多其他汇编语言中,汇编程序将(人机可读的)助记符编译为字节码。每个助记符都转换为特定的字节码。例如:
XOR AX, AX
编码为31C0
。
要解码机器语言,您需要自己喜欢的文本编辑器,NASM(Netwide Assembler)和十六进制编辑器。
步骤1:首先使用[BITS 16]指令在文本编辑器中输入要解码的助记符。保存。
步骤2:使用命令nasm <your file> -f bin -o <output file>
步骤3:使用十六进制编辑器打开输出文件。
步骤4:显示的字节将是解码的助记符。
以下是如何将字节码反编译为NASM语法助记符。这与上述步骤相反。
NASM附带工具ndisasm
- 或Netwide反汇编程序。该程序将字节码反汇编回原始指令。
您将需要NASM工具集,如果需要,还需要一个十六进制编辑器。
第1步:获取字节码文件。这应该是编译汇编语言。 C / C ++代码或任何其他机器语言文件可能在实际机器代码之前包含标题。
如果需要,可以使用十六进制编辑器检查/编辑字节码文件。
步骤2:运行此命令:ndisasm -b 16 <bytecode file>
。终端右侧显示的行是字节代码中的助记符。
如果字节码无效,有时ndisasm
会说某些字节是db
助记符 - 这意味着define byte
。换句话说,这是一个填充字节,ndisasm
找不到有效的助记符。
另外,请记住,在使用ndisasm
和任何其他反编译器或反汇编程序时,反编译器/反汇编程序不会检索注释或空格。