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))
我成功地找到了如何 运行 使用 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))