查看x86机器代码,如何确定下一条指令的起始位置



x86机器代码中的指令长度可变。我已经彻底研究了x86指令集。我读过关于如何将程序集转换为机器代码的文章。但到目前为止,我在任何一次学习中都没有看到(也许我错过了什么(处理器是如何知道一条指令在哪里结束,下一条指令从哪里开始的。

采取以下措施:

XOR CL, [12H] = 00110010 00001110 00010010 00000000 = 32H 0EH 12H 00H
XOR CL, 12H = 10000000 11110001 00010010 = 80 F1 12

如果我在看:

00110010 00001110 00010010 00000000 10000000 11110001 00010010。。。32小时0小时12小时00小时80 F1 12。。。^我怎么知道下一个指令从这里开始

当我研究网络中的OSI模型时,数据包将通过在每个组件的开头包含一个值来解决可变层大小的问题,该值告诉你该层将包含多少内容。但CPU指令比数据包紧凑得多,而且似乎不包含这些。

为什么?我想做什么,真的吗?

我的目标是分析程序的机器代码(没有反汇编程序-我需要最大的处理速度来分析大量数据,而反汇编程序做的工作比我需要做的更多,比如将二进制语法映射到字符串语法(,并记录所用操作码的某些统计信息。但我显然必须弄清楚一条指令在哪里结束,下一条指令开始执行。

查看x86机器代码,如何确定下一条指令的起始位置?

没有显式标记。您需要依次解码每条指令。每条指令都有一定的长度,下一条指令紧随其后。

如果您查看更现代的可变长度编码(如UTF-8(,您会发现它们比x86指令集更具逻辑定义。这只是吸取教训的结果。ARM也吸取了教训,将所有指令都设置为32位。

最新更新