【发布时间】:2014-09-27 04:29:42
【问题描述】:
假设我有一个指令位置。我想找到包含该指令的基本块。让我们将“基本块”定义为包含所需指令的基本块的入口点的指令位置。假设我禁用了任何形式的地址空间随机化,因此只要程序执行,所有程序部分和库都会加载到虚拟地址空间中的相同位置。我该怎么做呢?
【问题讨论】:
-
这似乎是特定于平台的。例如,根据您使用的是 Windows 还是 Posix,答案会有所不同。另外,不清楚虚拟地址空间是什么意思。事实上,整个问题都是假设性的。
-
您的意思是 « 包含此说明的部分 » ?
-
要找到“包含该指令的基本块”,您需要向后扫描(该指令可能不在块的开头)。向后扫描几乎是不可能的;它不是“特定于平台”的,而是特定于 CPU 的。即使使用带有“简单”汇编程序的 CPU——ARM 常规执行空间中的所有操作码都是 4 个字节长——你也不能说你是否正在返回数据区域。如果不反汇编整个代码,您将无法知道代码块从哪里开始。
标签: c assembly compiler-construction