gpt4 book ai didi

c - 给定基本 block 中的指令位置,如何找到该基本 block ?

转载 作者:行者123 更新时间:2023-12-04 11:19:21 29 4
gpt4 key购买 nike

假设我有一个指令位置。我想找到包含该指令的基本 block 。让我们将“基本 block ”定义为包含所需指令的基本 block 的入口点的指令位置。假设我禁用了任何形式的地址空间随机化,因此每当执行程序时,所有程序部分和库都会加载到虚拟地址空间中的相同位置。我该怎么做呢?

最佳答案

您可以在限制性假设下执行此操作。

首先,代码在任何一般意义上都不能 self 修改。这将使问题变得无法判定。

其次,您需要一个完整的跳跃目标列表。当然调试信息中也会包含这个。但是,如果您没有调试信息,仍然可以通过反汇编、查找所有分支和跳转指令并获取它们的直接目标来推断出很多信息。实现 switch 的跳转表也很有用。一个困难的情况是函数指针。好的逆向工程工具可以很好地做到这一点:在对其结构知之甚少的情况下反汇编代码。另一方面,它们不可能是完美的:散布的数据和代码总是会相互混淆。

第三,您需要程序中所有跳转/分支指令地址的列表。

有了这些 list ,您就可以开始了。每个基本 block 都以跳转目标开始,并运行到下一个目标之前的指令或跳转/分支指令(包括),以先到者为准。接受指令地址并在列表中搜索相关 block 开头和结尾的算法很简单。

实际上,最简单的方法是将列表合并为一个列表并使用二分搜索。搜索地址之前和之后的条目定义了它所在的 block 。

关于c - 给定基本 block 中的指令位置,如何找到该基本 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25123093/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com