如何解决x86-64 指令集的一个基本方面是否会阻止一个人“向后”获取?
这个问题听起来很奇怪,我知道,但没有详细说明为什么通过 x86 指令后退可能有好处(它与恶意软件分析研究有关):
- 我正在从头开始开发 x86-64 模拟器。
- 我正在阅读英特尔软件开发人员手册第 2A、2B、2C 和 2D 卷:指令集参考,A-Z 以实现提取解码执行周期
但我有一个基本问题,我对我未来的研究非常好奇,我想问而不是等待自己发现它,因为我更好地理解指令集的解析以确定它们的组件和边界.
通常在 x86-64 指令提取任务中
- 您开始知道要解析的指令的起始边界。
- 您必须解析下一个字节并确定边界:换句话说,您必须查找指令的每个可选字段并确定每个字段的边界以及指令结束的字节。
如果我们出于某种奇怪的原因想要在相反的方向做同样的事情,该怎么办:
- 您开始知道指令边界的位置。
- 您想解析前一个字节并确定边界,了解上一条指令的开头。
此时,任何了解此主题的人都指出,您甚至不知道是否打算执行前一条指令,因为跳转指令可能已将程序分支到此地址。这是给定的,我知道,我仍然有兴趣知道是否可以向后获取。
查看获取过程,我们有以下字段需要识别:
通常我们会按照给定起始地址的顺序查找指令前缀、操作码、ModR/M、SIB、位移、立即数字段的存在。我要问的是,如果有一个根本原因,我们无法按照给定结束地址的顺序查找立即字段、位移、SIB、ModR/M、操作码、指令前缀的存在。
我还没有完全理解实现获取指令所需的过程,所以我对这个过程还很幼稚。到目前为止,我的问题的答案对我来说似乎并不明显。我怀疑 x86-64 指令集的结构可能存在某些特征,使得只能在向前的方向上进行提取,但我还不能指出具体的原因。
有人可以确认是否存在一个根本原因(除了分支问题),即使没有解码/执行,也无法以相反的顺序获取 x86-64 程序?这是假设程序不执行 ROP,在这种情况下,熟悉该主题的人知道明显的问题(跳到指令的中间)。 我们能否至少确定向后取回的指令边界?为什么或为什么不?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。