前言
这篇文章主要补充一下pp.posix.dumps(0)
的含义
题目源码
#include<stdio.h>
void success(){
printf("success\n");
}
void failed(){
printf("failed\n");
}
void next(char *pwd){
if(!strcmp(pwd,"123456")){
success();
}else{
failed();
}
}
int main(void){
char name[9];
char pwd[9];
char n;
scanf("%s",name);
scanf("%s",pwd);
printf("please input n\n");
puts("this is puts\n");
n=getchar();
if(!strcmp(name,"jsk")){
next(pwd);
}else{
return 0;
}
return 0;
}
这次我多写了一层判断。主要还是来看一下pp.posix.dumps(0)
和pp.posix.dumps(1)
的区别。我就不多分析了,看结果。
测试脚本
from angr import *
import logging
import archinfo
logging.getLogger('angr.manager').setLevel(logging.DEBUG)
p = Project("test2",auto_load_libs=False)
state=p.factory.entry_state()
sm=p.factory.simulation_manager(state,threads=4)
res=sm.explore(find=0x4006BE,avoid=[0x4006CA,0x400645])
if len(res.found) > 0:
print res.found[0].posix.dumps(0)
print "---"
print res.found[0].posix.dumps(1)
print "---"
print res.found[0].posix.dumps(2)
结论
(0)输出的是found执行路径中的所有输入
(1)输出的是found执行路径中的所有输出
总结
所以呢,可能还会出现一些理解上的错误,欢迎各路师傅批评指正!