angr模拟状态下如何分配(malloc)内存?

How to allocate (malloc) memory in an angr simulation state?

我成功地找到了如何 运行 使用 angr 的程序,从核心转储定义的状态开始(参见 )但现在我想知道这个:

如何在程序的 SimulationState 中 malloc 内存?

我 运行 从中启动程序的起始状态是一个函数的开始,该函数接受一个指针和一个长度。我希望能够以任意长度 malloc 新鲜内存,并将此指针(和适当的长度)传递给函数。

我发现我认为有一个插件 class, angr.state_plugins.heap.heap_libc.SimHeapLibc (documentation) 有一个 malloc 方法,但我该如何使用它插件,它真的是我需要的吗?

好的,明白了。

首先,您想要的插件class是angr.state_plugins.heap.heap_ptmalloc.SimHeapPTMalloc。结果 angr.state_plugins.heap.heap_libc.SimHeapLibc 只是基础 class.

然后用例变成:

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))