修改后的代码如下:
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.model.listing.*;
import ghidra.program.model.symbol.*;
import ghidra.program.model.data.DataType;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
public class FunctionAll extends GhidraScript {
@Override
public void run() throws Exception {
// 创建JSON对象
JsonObject result = new JsonObject();
// 创建函数数组
JsonArray functionsArray = new JsonArray();
// 获取当前程序的函数列表
FunctionManager functionManager = currentProgram.getFunctionManager();
// 获取函数管理器中的所有函数
Iterator<Function> functionIterator = functionManager.getFunctions(true);
// 遍历所有全局函数
while (functionIterator.hasNext()) {
Function function = functionIterator.next();
Symbol primarySymbol = function.getSymbol(); // 获取函数的主要符号
JsonObject functionObj = new JsonObject();
String functionName = primarySymbol.getName(); // 获取函数名称
functionObj.addProperty("Name", functionName);
JsonArray variablesArray = new JsonArray();
for (Variable variable : function.getLocalVariables()) {
JsonObject variableObj = new JsonObject();
variableObj.addProperty("Name", variable.getName());
variablesArray.add(variableObj);
}
if (variablesArray.size() > 0) {
functionObj.add("Variables", variablesArray);
}
DataType returnType = function.getReturnType(); // 获取返回类型
if (returnType != null) {
functionObj.addProperty("ReturnType", returnType.getName());
}
JsonArray parametersArray = new JsonArray();
for (Parameter parameter : function.getParameters()) {
JsonObject parameterObj = new JsonObject();
parameterObj.addProperty("Name", parameter.getName());
parameterObj.addProperty("Type", parameter.getDataType().getName());
parametersArray.add(parameterObj);
}
if (parametersArray.size() > 0) {
functionObj.add("Parameters", parametersArray);
}
functionsArray.add(functionObj);
}
result.add("Functions", functionsArray);
// 定义输出文件路径
String outputFileName = currentProgram.getName() + "_All.json";
String outputFilePath = "output/" + outputFileName;
// 将结果写入JSON文件
try (FileWriter writer = new FileWriter(outputFilePath)) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonOutput = gson.toJson(result);
writer.write(jsonOutput);
println("函数信息已保存到: " + outputFilePath);
} catch (IOException e) {
e.printStackTrace();
}
}
}
修改后的代码将结果保存为JSON格式文件,并且包含了函数名称、变量列表、返回类型和参数列表等信息。输出文件的命名方式为当前程序名称加上”_All.json”。
内容由零声教学AI助手提供,问题来源于学员提问