8086指令的编码会MOV AL,4
是c604
?
另外,我将如何编码MOV AX, DS:5678h
和SUB BX,[Di+6]
谢谢你的帮助。
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] 指令。节省。
第二步:使用命令编译nasm <your file> -f bin -o <output file>
第 3 步:使用十六进制编辑器打开输出文件。
第 4 步:显示的字节将是解码后的助记符。
以下是如何将字节码反编译为 NASM 语法助记符。这与上述步骤相反。
NASM 附带工具ndisasm
- 或 Netwide Disassembler。该程序会将字节码反汇编回原始指令。
您将需要 NASM 工具集,如果需要,还需要一个十六进制编辑器。
第 1 步:获取您的字节码文件。这应该是汇编语言。C/C++ 代码或任何其他机器语言文件可能在实际机器代码之前包含一个标头。
如果需要,您可以使用十六进制编辑器检查/编辑您的字节码文件。
第 2 步:运行此命令:ndisasm -b 16 <bytecode file>
. 终端右侧显示的行是来自字节码的助记符。
如果字节码无效,有时ndisasm
会说某些字节是db
助记符——这些意思define byte
。换句话说,这是一个填充字节,ndisasm
找不到有效的助记符。
另外,请记住,当使用ndisasm
和任何其他反编译器或反汇编器时,反编译器/反汇编器不会检索注释或空格。