2016-11-10 4 views
0

Ich arbeite an einer der AnGR-doc Herausforderungen (https://github.com/angr/angr-doc/blob/2d45c9e6d9f91e83988719aa19940aec2cfd8747/examples/ekopartyctf2015_rev100/solve.py), aber in meinem Ansatz habe ich diese Situation:Verständnis der AnGR Speicherkarte

mov  rdx, [rbp+var_150]; 
mov  rdx, [rdx]; 
mov  rdx, [rdx+8]; 
movsx esi, byte ptr [rdx] 

wo ich brauche zu setzen esi als symbolische (esi wird be enthält den Wert).

Ich habe so etwas wie dies versucht:

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

aber nicht auch funktioniert, ich habe jeden Zeiger mit einem Bitvektor Wert (BVV) zu setzen versucht, aber es hat nicht funktioniert entweder.

was mache ich falsch?

+0

den gesamten Speicher zu setzen Was genau meinen Sie mit „funktioniert nicht“? – Robert

Antwort

0

Ich fand eine Lösung. Ich habe ein falsches Verständnis des Speicherlayouts. Ich dachte, dass alle Erinnerung symbolisch ist, dann habe ich erwartet, dass der Zugriff auf Multiples ptr "autmagicaly" aufgelöst wurde. Ich behebe mein Problem beim Erstellen eines BitVector Values ​​und speichern es in rpb-0x150, und das in den Zeigern. hier ist das Beispiel:

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

Jetzt versuche ich undestand wie sybolic