Add decompilation support for function arguments

This commit is contained in:
Dhruv Maroo
2023-04-22 07:19:28 +05:30
parent c24ddf0a79
commit a206ec28f3
2 changed files with 17 additions and 6 deletions

View File

@@ -4,6 +4,6 @@ import ghidrust.decompiler.parser.c.gen.CParser;
public class Run {
public static void main(String[] args) {
System.out.println(CParser.transpile("/* hello::return_0 */\n\n undefined8 hello::return_0(void)\n\n {\n return 0;\n }"));
System.out.println(CParser.transpile("int main(int a, int b) { return 0; }"));
}
}

View File

@@ -49,7 +49,7 @@ public class CVisitor implements CParserVisitor {
String ret = (String) child.jjtAccept(this, data);
if (ret != null) {
sb.append(ret);
if (!ret.equals("")) {
if (!ret.equals("") && i != child_count - 1) {
sb.append(" ");
}
}
@@ -141,7 +141,7 @@ public class CVisitor implements CParserVisitor {
String[] ret = new String[2];
ret[0] = (String) node.jjtGetChild(0).jjtAccept(this, data);
if (node.jjtGetNumChildren() == 1) {
ret[1] = "0";
ret[1] = null;
} else {
ret[1] = (String) node.jjtGetChild(1).jjtAccept(this, data);
}
@@ -195,12 +195,23 @@ public class CVisitor implements CParserVisitor {
}
public Object visit(ASTParameterList node, Object data) {
return defaultVisit(node, data);
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < node.jjtGetNumChildren(); i++) {
if (i != 0) {
sb.append(", ");
}
sb.append(node.jjtGetChild(i).jjtAccept(this, data));
}
return sb.toString();
}
public Object visit(ASTParameterDeclaration node, Object data) {
StringBuilder param = new StringBuilder((String) defaultSpacedVisit(node, data));
return param.toString();
StringBuilder sb = new StringBuilder("");
sb.append(node.jjtGetChild(1).jjtAccept(this, data));
sb.append(": ");
sb.append(node.jjtGetChild(0).jjtAccept(this, data));
return sb.toString();
}
public Object visit(ASTIdentifierList node, Object data) {