ZBLOG

代码: import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import ghidra.app.script.GhidraScript; import ghidra.program.model.address.Address; import ghidra.program.mod...

根据您的要求,我已经修改了代码,并添加了输出结果以三元组格式输出,并保存为JSON文件。以下是修改后的代码:

  1. import com.google.gson.Gson;
  2. import com.google.gson.GsonBuilder;
  3. import com.google.gson.JsonArray;
  4. import com.google.gson.JsonObject;
  5. import ghidra.app.script.GhidraScript;
  6. import ghidra.program.model.address.Address;
  7. import ghidra.program.model.listing.*;
  8. import ghidra.program.model.symbol.*;
  9. import ghidra.program.model.data.DataType;
  10. import java.io.FileWriter;
  11. import java.io.IOException;
  12. import java.util.Iterator;
  13. public class FunctionAll extends GhidraScript {
  14. @Override
  15. public void run() throws Exception {
  16. // 创建JSON对象
  17. JsonObject root = new JsonObject();
  18. JsonArray functionsArray = new JsonArray();
  19. // 获取当前程序的函数列表
  20. FunctionManager functionManager = currentProgram.getFunctionManager();
  21. // 获取函数管理器中的所有函数
  22. Iterator<Function> functionIterator = functionManager.getFunctions(true);
  23. // 遍历所有全局函数
  24. while (functionIterator.hasNext()) {
  25. Function function = functionIterator.next();
  26. JsonObject functionObject = new JsonObject();
  27. Symbol primarySymbol = function.getSymbol(); // 获取函数的主要符号
  28. String functionName = primarySymbol.getName(); // 获取函数名称
  29. // 添加函数基本信息
  30. functionObject.addProperty("FunctionName", functionName);
  31. StringBuilder outputResultBuilder = new StringBuilder();
  32. // 获取函数局部变量
  33. for (Variable variable : function.getLocalVariables()) {
  34. JsonObject variableObject = new JsonObject();
  35. variableObject.addProperty("VariableName", variable.getName());
  36. variableObject.addProperty("VariableType", variable.getDataType().getName());
  37. String resultString =
  38. functionName + ", hasVariable, " + variable.getName() + ";\n" +
  39. variable.getName() + ", VariableType, " + variable.getDataType().getName() + ";\n";
  40. outputResultBuilder.append(resultString);
  41. functionObject.add("Variable", variableObject);
  42. }
  43. // 获取函数参数
  44. for (Parameter parameter : function.getParameters()) {
  45. JsonObject parameterObject = new JsonObject();
  46. parameterObject.addProperty("ParameterName", parameter.getName());
  47. parameterObject.addProperty("ParameterType", parameter.getDataType().getName());
  48. String resultString =
  49. functionName + ", hasParameters, " + parameter.getName() + ";\n" +
  50. parameter.getName() + ", ParametersType, " + parameter.getDataType().getName() + ";\n";
  51. outputResultBuilder.append(resultString);
  52. functionObject.add("Parameter", parameterObject);
  53. }
  54. // 获取函数调用关系
  55. for (Function caller : function.getCallingFunctions(monitor)) {
  56. String resultString = functionName + ", Call, " + caller.getName() + ";\n";
  57. outputResultBuilder.append(resultString);
  58. }
  59. // 将函数信息添加到数组中
  60. functionsArray.add(functionObject);
  61. // 输出结果到控制台
  62. println(outputResultBuilder.toString());
  63. }
  64. // 将函数数组添加到根对象
  65. root.add("Functions", functionsArray);
  66. // 使用Gson库将JSON对象转换为字符串
  67. Gson gson = new GsonBuilder().setPrettyPrinting().create();
  68. String json = gson.toJson(root);
  69. // 定义输出文件路径
  70. String outputFileName = currentProgram.getName() + "_All.json";
  71. String outputFilePath = "output/" + outputFileName;
  72. // 将JSON字符串写入文件
  73. try (FileWriter writer = new FileWriter(outputFilePath)) {
  74. writer.write(json);
  75. println("函数信息已保存到: " + outputFilePath);
  76. } catch (IOException e) {
  77. e.printStackTrace();
  78. }
  79. }
  80. }

此代码会输出结果到控制台,并将结果保存为JSON文件。请确保您已创建名为”output”的目录来存储输出文件。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=13981

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?