ZBLOG

修改代码,输出结果如下,并保存为JSON文件 (_init,hasVariable,变量名;\n) (_init,ReturnType,int;\n) (_init,hasParameters,ctx;\n) (ctx,ParametersType,EVP_PKEY_CTX *;\n) (_init,Call,_init;\n) (FUN_0011bc00,hasVariable,变量名;\n)( FUN_0011bc00,ReturnType,undefined;\n) (FUN_001...

修改后的代码如下:

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助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?