【angr源码分析】4. SimOS
SimOS
在factory中,使用self.project.simos.state_entry(**kwargs)
等方法来获得一个SimState。
这里研究simos的返回SimState的方法
在Project类的__init__方法中,使用self.simos = os_mapping[self.loader.main_object.os](self)
来为project添加simos属性。在project.py中,有from angr.simos import SimOS, os_mapping
,所以研究SimOS类,以及os_mapping。(***找不到os_mapping)
SimOS类
用于描述操作系统以及架构等。
def init(self, project, name=None)
***参数都不认识
1 | def __init__(self, project, name=None): |
1 | def state_entry(self, **kwargs): |
state_entry和state_full_init实际上都是在调用state_blank,所以只研究state_blank
def state_blank():
个人理解:生成一个状态可能和操作系统的状态有关。单纯地生成一个状态是没有意义的,需要考虑到文件的权限,系统的架构等信息。在生成状态后,为其处理输入输出流,初始化一些信息。所以把SimState的生成放在simos中实现。
核心:state = SimState(self.project, **kwargs)
其他的操作目前觉得不重要
1 | def state_blank(self, |