about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--miasm2/core/ctypesmngr.py13
-rw-r--r--miasm2/core/objc.py14
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: