如何使用具体值执行angr中的函数?

问题描述 投票:0回答:1

在Angr中,我有这样的代码

#include <stdio.h>  

typedef struct A_struct
{
    int data1;
    int data2;
} A;


void bar(A* a){
    a->data2 += 1;
}

void foo(A* a)  
{
    a->data1 += 1;
    bar(a);
}

int main()  
{  
    A a;
    a.data1 = 1;
    a.data2 = 2;
    foo(&a);
    printf("%d, %d\n", a.data1, a.data2);
    return 0;  
}  

我将C代码编译成Binary,我想使用angr来执行函数

foo
,如何只执行
foo
而不执行
main
? 对于符号执行,如何获取结构体A的执行轨迹? 具体执行的话,如果我将
a
设置为内存部分,如何得到
a
的结果?

我尝试使用BVS作为参数

import angr
import claripy

b = angr.Project('test_fun')
func_addr = b.loader.find_symbol('foo').rebased_addr
print(func_addr)
f = b.factory.callable(func_addr)
x = claripy.BVS('x', 64)
res = f(x)
print(res, type(res))

但是结果不是我想要的,结果是x_40_64,我不知道这是什么。而且我不知道如何传递一些具体的内存作为参数

reverse-engineering angr symbolic-execution
1个回答
0
投票

您可能正在寻找函数

project.factory.call_state
,您可以通过在地址参数之后传递位置参数来将参数传递给函数。 之后,您可以使用该状态初始化模拟管理器,并对其进行模拟。

© www.soinside.com 2019 - 2024. All rights reserved.