2

我成功地弄清楚了如何使用 angr 运行程序,从核心转储定义的状态开始(请参阅How to run program using angr after loading with the elfcore backend?)但现在我想知道这一点:

如何在程序的 SimulationState 中分配内存?

我运行程序的起始状态是一个函数的开始,它接受一个指针和一个长度。我希望能够以任意长度重新分配内存,并将这个指针(和适当的长度)传递给函数。

我发现有一个我认为是一个插件类angr.state_plugins.heap.heap_libc.SimHeapLibc文档),它有一个malloc方法,但是我如何使用这个插件,它实际上是我需要的吗?

4

1 回答 1

1

好吧,想通了。

首先,你想要的插件类是angr.state_plugins.heap.heap_ptmalloc.SimHeapPTMalloc. 原来angr.state_plugins.heap.heap_libc.SimHeapLibc只是基类。

然后用例变为:

simstate = angr.factory.AngrObjectFactory(proj).blank_state()

# IMPORTANT NOTE: you need to register the plugin with the name heap or it will break
simstate.register_plugin("heap", angr.state_plugins.heap.heap_ptmalloc.SimHeapPTMalloc())

# Voila, malloc and use arbitrary amounts of memory in the simulation space.
ptr = self.simstate.heap.malloc(data_len)
simstate.memory.store(ptr, simstate.solver.BVV(data_bytes, data_len*8))
于 2019-12-03T15:59:27.650 回答