diff options
| -rw-r--r-- | miasm2/core/ctypesmngr.py | 13 | ||||
| -rw-r--r-- | miasm2/core/objc.py | 14 |
2 files changed, 17 insertions, 10 deletions
diff --git a/miasm2/core/ctypesmngr.py b/miasm2/core/ctypesmngr.py index 761689a8..4bd32cb3 100644 --- a/miasm2/core/ctypesmngr.py +++ b/miasm2/core/ctypesmngr.py @@ -199,7 +199,7 @@ class CTypeFunc(CTypeBase): if type_ret: assert isinstance(type_ret, CTypeBase) if args: - for arg in args: + for arg_name, arg in args: assert isinstance(arg, CTypeBase) args = tuple(args) else: @@ -225,7 +225,7 @@ class CTypeFunc(CTypeBase): return "<Func:%s (%s) %s(%s)>" % (self.type_ret, self.abi, self.name, - ", ".join([str(arg) for arg in self.args])) + ", ".join(["%s %s" % (name, arg) for (name, arg) in self.args])) class CTypeEllipsis(CTypeBase): @@ -591,7 +591,14 @@ class CAstTypes(object): type_ret = self.ast_to_typeid(ast.type) name, decl_info = self.get_funcname(ast.type) if ast.args: - args = [self.ast_to_typeid(arg) for arg in ast.args.params] + args = [] + for arg in ast.args.params: + typeid = self.ast_to_typeid(arg) + if isinstance(typeid, CTypeEllipsis): + arg_name = None + else: + arg_name = arg.name + args.append((arg_name, typeid)) else: args = [] diff --git a/miasm2/core/objc.py b/miasm2/core/objc.py index 89140ec9..3fe0e9fe 100644 --- a/miasm2/core/objc.py +++ b/miasm2/core/objc.py @@ -45,8 +45,8 @@ def objc_to_str(objc, result=None): break elif isinstance(objc, ObjCFunc): args_str = [] - for arg in objc.args: - args_str.append(objc_to_str(arg)) + for name, arg in objc.args: + args_str.append(objc_to_str(arg, name)) args = ", ".join(args_str) result += "(%s)" % args objc = objc.type_ret @@ -313,8 +313,8 @@ class ObjCFunc(ObjC): out.append("Function (%s) %s: (align: %d)" % (self.abi, self.name, self.align)) out.append(" ret: %s" % (str(self.type_ret))) out.append(" Args:") - for arg in self.args: - out.append(" %s" % arg) + for name, arg in self.args: + out.append(" %s %s" % (name, arg)) return '\n'.join(out) def __cmp__(self, other): @@ -1328,10 +1328,10 @@ class CTypesManager(object): type_id.type_ret, resolved, to_fix, lvl + 1) resolved[type_id.type_ret] = type_ret args = [] - for arg in type_id.args: + for name, arg in type_id.args: objc = self._get_objc(arg, resolved, to_fix, lvl + 1) resolved[arg] = objc - args.append(objc) + args.append((name, objc)) out = ObjCFunc(type_id.name, type_id.abi, type_ret, args, self.void_ptr.align, self.void_ptr.size) elif isinstance(type_id, CTypeEllipsis): @@ -1380,7 +1380,7 @@ class CTypesManager(object): return True elif isinstance(objc, ObjCFunc): assert self.check_objc(objc.type_ret, done) - for arg in objc.args: + for name, arg in objc.args: assert self.check_objc(arg, done) return True else: |