cont = Container.fallback_container(data, None, addr=0) machine = Machine("x86_64") dis_engine, ira = machine.dis_engine, machine.ira mdis = dis_engine(cont.bin_stream, symbol_pool=cont.symbol_pool) addr_head = 0 blocks = mdis.dis_multiblock(addr_head) lbl_head = mdis.symbol_pool.getby_offset(addr_head) ir_arch_a = ira(mdis.symbol_pool) for block in blocks: ir_arch_a.add_block(block) open('graph_irflow.dot', 'w').write(ir_arch_a.graph.dot()) # Main function's first argument's type is "struct ll_human*" ptr_llhuman = types_mngr.get_objc(CTypePtr(CTypeStruct('ll_human'))) arg0 = ExprId('ptr', 64) ctx = {ir_arch_a.arch.regs.RDI: arg0} expr_types = {arg0: (ptr_llhuman,), ExprInt(0x8A, 64): (ptr_llhuman,)} mychandler = MyCHandler(types_mngr, expr_types) for expr in get_funcs_arg0(ctx, ir_arch_a, lbl_head): print "Access:", expr for c_str, ctype in mychandler.expr_to_c_and_types(expr): print '\taccess:', c_str print '\tc type:', ctype
unsigned int length; struct line* line; }; """ # Type manager for x86 64: structures not packed base_types = CTypeAMD64_unk() types_ast = CAstTypes() # Add C types definition types_ast.add_c_decl(text) types_mngr = CTypesManagerNotPacked(types_ast, base_types) # Create the ptr variable with type "struct rectangle*" ptr_rectangle = types_mngr.get_objc(CTypePtr(CTypeStruct('rectangle'))) ptr = ExprId('ptr', 64) c_context = {ptr.name: ptr_rectangle} mychandler = CHandler(types_mngr, {}) # Parse some C accesses c_acceses = [ "ptr->width", "ptr->length", "ptr->line", "ptr->line->color", "ptr->line->color[3]", "ptr->line->size" ] for c_str in c_acceses: expr = mychandler.c_to_expr(c_str, c_context) c_type = mychandler.c_to_type(c_str, c_context) print 'C access:', c_str
cont = Container.fallback_container(data, None, addr=0) machine = Machine("x86_64") dis_engine, ira = machine.dis_engine, machine.ira mdis = dis_engine(cont.bin_stream, symbol_pool=cont.symbol_pool) addr_head = 0 asmcfg = mdis.dis_multiblock(addr_head) lbl_head = mdis.symbol_pool.getby_offset(addr_head) ir_arch_a = ira(mdis.symbol_pool) for block in asmcfg.blocks: ir_arch_a.add_block(block) open('graph_irflow.dot', 'w').write(ir_arch_a.graph.dot()) # Main function's first argument's type is "struct ll_human*" ptr_llhuman = types_mngr.get_objc(CTypePtr(CTypeStruct('ll_human'))) arg0 = ExprId('ptr', 64) ctx = {ir_arch_a.arch.regs.RDI: arg0} expr_types = {arg0: (ptr_llhuman,), ExprInt(0x8A, 64): (ptr_llhuman,)} mychandler = MyCHandler(types_mngr, expr_types) for expr in get_funcs_arg0(ctx, ir_arch_a, lbl_head): print "Access:", expr for c_str, ctype in mychandler.expr_to_c_and_types(expr): print '\taccess:', c_str print '\tc type:', ctype
int b; }; """ base_types = CTypeAMD64_unk() types_ast = CAstTypes() # Add C types definition types_ast.add_c_decl(text_1) types_ast.add_c_decl(text_2) types_mngr = CTypesManagerNotPacked(types_ast, base_types) for type_id, type_desc in types_mngr.types_ast._types.iteritems(): print type_id obj = types_mngr.get_objc(type_id) print obj print repr(obj) types_mngr.check_objc(obj) for type_id, type_desc in types_mngr.types_ast._typedefs.iteritems(): print type_id obj = types_mngr.get_objc(type_id) print obj print repr(obj) types_mngr.check_objc(obj) void_ptr = types_mngr.void_ptr obj_dummy = types_mngr.get_objc(CTypeId("dummy")) obj_int = types_mngr.get_objc(CTypeId("int"))
}; """ base_types = CTypeAMD64_unk() types_ast = CAstTypes() # Add C types definition types_ast.add_c_decl(text_1) types_ast.add_c_decl(text_2) types_mngr = CTypesManagerNotPacked(types_ast, base_types) for type_id, type_desc in types_mngr.types_ast._types.iteritems(): print type_id obj = types_mngr.get_objc(type_id) print obj print repr(obj) types_mngr.check_objc(obj) for type_id, type_desc in types_mngr.types_ast._typedefs.iteritems(): print type_id obj = types_mngr.get_objc(type_id) print obj print repr(obj) types_mngr.check_objc(obj) void_ptr = types_mngr.void_ptr obj_dummy = types_mngr.get_objc(CTypeId("dummy")) obj_int = types_mngr.get_objc(CTypeId("int"))
unsigned int length; struct line* line; }; """ # Type manager for x86 64: structures not packed base_types = CTypeAMD64_unk() types_ast = CAstTypes() # Add C types definition types_ast.add_c_decl(text) types_mngr = CTypesManagerNotPacked(types_ast, base_types) # Create the ptr variable with type "struct rectangle*" ptr_rectangle = types_mngr.get_objc(CTypePtr(CTypeStruct('rectangle'))) ptr = ExprId('ptr', 64) c_context = {ptr.name: ptr_rectangle} mychandler = CHandler(types_mngr, {}) # Parse some C accesses c_acceses = ["ptr->width", "ptr->length", "ptr->line", "ptr->line->color", "ptr->line->color[3]", "ptr->line->size" ] for c_str in c_acceses: