首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解angr内存映射

理解angr内存映射
EN

Stack Overflow用户
提问于 2016-11-10 20:27:28
回答 1查看 1.2K关注 0票数 0

我正在研究一个angr-doc挑战(rev100/solve.py),但在我的方法中,我遇到了这样的情况:

代码语言:javascript
复制
mov     rdx, [rbp+var_150];
mov     rdx, [rdx];
mov     rdx, [rdx+8];
movsx   esi, byte ptr [rdx]

其中我需要将esi设置为符号(esi将包含该值)。

我试过这样的方法:

代码语言:javascript
复制
#mov     rdx, [rbp+var_150]
p1 = init_state.memory.load(init_state.regs.rbp-0x150, 8, endness=p.arch.memory_endness)
#mov     rdx, [rdx]
p2 = init_state.memory.load(p1, 8, endness=p.arch.memory_endness)
#mov     rdx, [rdx+8]
p3 = init_state.memory.load(p2+8, 8, endness=p.arch.memory_endness)
#movsx   esi, byte ptr [rdx]
r1 = init_state.memory.load(p3, 8, endness=p.arch.memory_endness)

但是它也不起作用,我试着用一个BitVector值(BVV)来设置每个指针,但是它也没有工作。

我做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-11 18:37:11

我找到了解决办法。我对内存布局有误解。我认为所有的内存都是象征性的,然后我期待着对倍数ptr的访问是解析“自动魔法”。我解决了创建BitVector值并将其存储在rpb-0x150和指针中的问题。下面是一个例子:

代码语言:javascript
复制
#mov     rdx, [rbp+var_150]
ptr_v_2 = claripy.BVV(0xe000000000, 64)
init_state.memory.store(init_state.regs.rbp-0x150, ptr_v_2)
p3 = init_state.memory.load(init_state.regs.rbp-0x150, 8, endness=p.arch.memory_endness)

#mov     rdx, [rdx]
ptr_v_1 = claripy.BVV(0xd000000000, 64)
init_state.memory.store(p3, ptr_v_1)
p2 = init_state.memory.load(p3, 8, endness=p.arch.memory_endness)

#mov     rdx, [rdx+8]
ptr_v = claripy.BVV(0xc000000000, 64)
init_state.memory.store(p2+8, ptr_v)
p1 = init_state.memory.load(p2+8, 8, endness=p.arch.memory_endness)

现在,我想弄清楚如何设置所有的记忆系统

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40536425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档