微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

x86机器代码中的指令是可变长度的。我已经深入研究the x86 instruction set。我已经读过how to convert assembly to machine code。但是到目前为止,在我的任何学习中都没有看到处理器(也许我错过了一些东西),处理器如何知道一条指令在哪里结束而下一条指令在哪里开始。

请执行以下操作:

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 ...
32H 0EH 12H 00H 80 F1 12 ...
                ^
How do I kNow the next instruction starts here?

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

为什么?我到底想做什么?

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

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

解决方法

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

如果查看更现代的可变长度编码(例如UTF-8),则会发现它们在逻辑上比x86指令集定义得更多。那只是吸取的教训的结果。 ARM也吸取了教训,并将所有指令设为32位。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。