Xian-Ming Zhang

130 papers C 13Journal 108Unranked 9
YearRankTypeTitle / Venue / Authors
2026 J jnl
Sci. China Inf. Sci.
Boda Ning, Qing-Long Han, Meng Luan, Guanghui Wen, Xiaohua Ge, Xian-Ming Zhang, Lei Ding
2026 J jnl
Int. J. Syst. Sci.
Hong-Bing Zeng, Wei-Min Wang, Xian-Ming Zhang, Chen Peng
2026 J jnl
IEEE CAA J. Autom. Sinica
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge
2026 J jnl
Sci. China Inf. Sci.
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge, Bao-Lin Zhang, Chen Peng
2026 J jnl
Appl. Math. Comput.
Xiuli Ma, Bo Liu, Xinchun Jia, Xin-Ge Liu, Xian-Ming Zhang
2026 J jnl
Sci. China Inf. Sci.
Xian-Ming Zhang, Qing-Long Han, Bao-Lin Zhang, Xiaohua Ge
2026 J jnl
Appl. Math. Lett.
Nuo Cheng, Wei Wang, Hong-Bing Zeng, Xinge Liu, Xian-Ming Zhang
2026 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Chang-Xin Li, Wei Wang, Hong-Bing Zeng, Xian-Ming Zhang
2026 J jnl
Neurocomputing
Xiuli Ma, Bo Liu, Xinchun Jia, Xian-Ming Zhang
2025 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Hong-Bing Zeng, Zong-Jun Zhu, Shen-Ping Xiao, Xian-Ming Zhang
2025 J jnl
Autom.
Hong-Bing Zeng, Yu-Jie Chen, Yong He, Xian-Ming Zhang
2025 J jnl
Autom.
Hongchenyu Yang, Chen Peng, Zhiru Cao, Xian-Ming Zhang
2025 J jnl
IEEE CAA J. Autom. Sinica
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge, Bao-Lin Zhang
2025 J jnl
IEEE Trans Autom. Sci. Eng.
Lan Zhou, Yongbo Sun, Yong He, Hongyi Li, Xian-Ming Zhang
2025 J jnl
Neurocomputing
Yun Chen, Chengda Lu, Xian-Ming Zhang
2025 J jnl
Sci. China Inf. Sci.
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge, Derui Ding, Boda Ning, Bao-Lin Zhang
2025 J jnl
Sci. China Inf. Sci.
Xiaohua Ge, Qing-Long Han, Xian-Ming Zhang, Derui Ding, Boda Ning
2025 J jnl
IEEE CAA J. Autom. Sinica
Kamal Rsetam, Zhenwei Cao, Zhihong Man, Xian-Ming Zhang
2025 J jnl
IEEE Trans Autom. Sci. Eng.
Wei Wang, Jin-Ming Liang, Hong-Bing Zeng, Xian-Ming Zhang
2025 J jnl
IEEE Internet Things J.
Dengfeng Pan, Derui Ding, Xiaohua Ge, Qing-Long Han, Xian-Ming Zhang
2025 J jnl
Sci. China Inf. Sci.
Derui Ding, Qing-Long Han, Xiaohua Ge, Xian-Ming Zhang, Jun Wang
2025 conf
ITSC
Xiaohua Ge, Dengfeng Pan, Derui Ding, Qing Wu, Qing-Long Han, Xian-Ming Zhang
2024 J jnl
Sci. China Inf. Sci.
Xian-Ming Zhang, Qing-Long Han, Bao-Lin Zhang, Xiaohua Ge, Dawei Zhang
2024 J jnl
IEEE Trans. Autom. Control.
Lan Zhou, Dongxu Gao, Jinhua She, Xian-Ming Zhang, Huaicheng Yan
2024 J jnl
IEEE CAA J. Autom. Sinica
Xiaohua Ge, Qing-Long Han, Xian-Ming Zhang, Derui Ding
2024 conf
ANZCC
Zhao-Qing Liu, Xiaohua Ge, Hao Xie, Qing-Long Han, Jinchuan Zheng, Xian-Ming Zhang
2024 J jnl
IEEE Trans. Veh. Technol.
Dengfeng Pan, Derui Ding, Xiaohua Ge, Qing-Long Han, Xian-Ming Zhang
2024 conf
BDIOT
Qing Li, Xing-Rong Fan, Xin-Yue Luo, Xian-Ming Zhang, Zhao-Jie Jiao
2024 J jnl
J. Frankl. Inst.
Shuailei Zhang, Meilan Tang, Xinge Liu, Xian-Ming Zhang
2024 J jnl
Neural Networks
Hong-Bing Zeng, Zong-Jun Zhu, Wei Wang, Xian-Ming Zhang
2024 J jnl
IEEE Trans. Veh. Technol.
Xiaohua Ge, Qing Wu, Qing-Long Han, Xian-Ming Zhang
2024 J jnl
IEEE Trans. Fuzzy Syst.
Hong-Bing Zeng, Zong-Jun Zhu, Tian-Shun Peng, Wei Wang, Xian-Ming Zhang
2023 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge, Baolin Zhang
2023 J jnl
IEEE Trans. Fuzzy Syst.
Tian-Shun Peng, Hong-Bing Zeng, Wei Wang, Xian-Ming Zhang, Xin-Ge Liu
2023 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Dengfeng Pan, Derui Ding, Xiaohua Ge, Qing-Long Han, Xian-Ming Zhang
2023 J jnl
IEEE CAA J. Autom. Sinica
Xiaohua Ge, Qing-Long Han, Qing Wu, Xian-Ming Zhang
2023 J jnl
Annu. Rev. Control.
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge, Boda Ning, Bao-Lin Zhang
2023 J jnl
IEEE Trans. Intell. Veh.
Zhao-Qing Liu, Xiaohua Ge, Qing-Long Han, Yu-Long Wang, Xian-Ming Zhang
2023 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Hui-Chao Lin, Hong-Bing Zeng, Xian-Ming Zhang, Wei Wang
2023 J jnl
Autom.
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge, Chen Peng
2022 J jnl
IEEE CAA J. Autom. Sinica
Xiaohua Ge, Qing-Long Han, Jun Wang, Xian-Ming Zhang
2022 J jnl
Autom.
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge
2022 J jnl
IEEE Trans. Cybern.
Hong-Bing Zeng, Sha-Jun Zhou, Xian-Ming Zhang, Wei Wang
2022 J jnl
IEEE Trans. Autom. Control.
Chao Deng, Changyun Wen, Jiangshuai Huang, Xian-Ming Zhang, Ying Zou
2022 J jnl
IEEE CAA J. Autom. Sinica
Xiaohua Ge, Shunyuan Xiao, Qing-Long Han, Xian-Ming Zhang, Derui Ding
2022 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Ali Kazemy, James Lam, Xian-Ming Zhang
2022 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Jun Chen, Xian-Ming Zhang, Ju H. Park, Shengyuan Xu
2022 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Wen-Juan Lin, Qing-Long Han, Xian-Ming Zhang, Jinpeng Yu
2022 J jnl
IEEE Trans. Veh. Technol.
Xiaohua Ge, Qing-Long Han, Jun Wang, Xian-Ming Zhang
2022 J jnl
Int. J. Syst. Sci.
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge
2022 J jnl
Int. J. Syst. Sci.
Xian-Ming Zhang, Qing-Long Han
2021 J jnl
IEEE Trans. Ind. Electron.
Lan Zhou, Jinhua She, Xian-Ming Zhang, Zhu Zhang
2021 J jnl
Neurocomputing
Li Li, Xinge Liu, Meilan Tang, Shuailei Zhang, Xian-Ming Zhang
2021 J jnl
IEEE Trans. Cybern.
Min Zhao, Chen Peng, Qing-Long Han, Xian-Ming Zhang
2021 J jnl
Int. J. Autom. Comput.
Xiaohua Ge, Qing-Long Han, Xian-Ming Zhang, Derui Ding
2021 J jnl
IEEE CAA J. Autom. Sinica
Xueli Wang, Derui Ding, Hongli Dong, Xian-Ming Zhang
2021 J jnl
IEEE CAA J. Autom. Sinica
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge
2021 J jnl
IEEE Trans. Cybern.
Yanping Yang, Xian-Ming Zhang, Wangli He, Qing-Long Han, Chen Peng
2021 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Chengda Lu, Xian-Ming Zhang, Min Wu, Qing-Long Han, Yong He
2021 J jnl
IEEE Trans. Signal Inf. Process. over Networks
Derui Ding, Zidong Wang, Qing-Long Han, Xian-Ming Zhang
2021 J jnl
Autom.
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge
2020 J jnl
IEEE Trans. Cybern.
Xiaohua Ge, Qing-Long Han, Xian-Ming Zhang, Lei Ding, Fuwen Yang
2020 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Xiaohua Ge, Qing-Long Han, Lei Ding, Yu-Long Wang, Xian-Ming Zhang
2020 J jnl
Int. J. Syst. Sci.
Lan Zhou, Jinhua She, Xian-Ming Zhang, Zhu Zhang
2020 J jnl
IEEE Trans. Cybern.
Dawei Zhang, Qing-Long Han, Xian-Ming Zhang
2020 J jnl
IEEE CAA J. Autom. Sinica
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge, Derui Ding, Lei Ding, Dong Yue, Chen Peng
2020 J jnl
IEEE Trans. Cybern.
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge, Bao-Lin Zhang
2020 J jnl
IEEE Trans. Ind. Electron.
Lan Zhou, Jinhua She, Xian-Ming Zhang, Zhenwei Cao, Zhu Zhang
2020 J jnl
Appl. Math. Comput.
Bao-Lin Zhang, Luhua Cheng, Kejia Pan, Xian-Ming Zhang
2020 J jnl
IEEE Trans. Cybern.
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge, Lei Ding
2020 J jnl
Inf. Sci.
Xiaohua Ge, Qing-Long Han, Xian-Ming Zhang, Derui Ding, Fuwen Yang
2020 J jnl
Inf. Sci.
Yanping Yang, Xian-Ming Zhang, Wangli He, Qing-Long Han, Chen Peng
2019 J jnl
Inf. Sci.
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge
2019 J jnl
Autom.
Xiaohua Ge, Qing-Long Han, Maiying Zhong, Xian-Ming Zhang
2019 J jnl
IEEE Trans. Ind. Informatics
Lei Ding, Qing-Long Han, Xian-Ming Zhang
2019 J jnl
Neurocomputing
Derui Ding, Xian-Ming Zhang
2018 J jnl
IEEE Trans. Cybern.
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge
2018 J jnl
Neurocomputing
Xiaohua Ge, Qing-Long Han, Derui Ding, Xian-Ming Zhang, Boda Ning
2018 J jnl
Neurocomputing
Derui Ding, Qing-Long Han, Yang Xiang, Xiaohua Ge, Xian-Ming Zhang
2018 J jnl
IEEE Trans. Ind. Electron.
Xiaohua Ge, Qing-Long Han, Xian-Ming Zhang
2018 conf
ISIE
Bao-Lin Zhang, Xian-Ming Zhang, Gong-You Tang
2018 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Xian-Ming Zhang, Qing-Long Han, Jun Wang
2018 J jnl
IEEE Trans. Cybern.
Lei Ding, Qing-Long Han, Xiaohua Ge, Xian-Ming Zhang
2018 J jnl
IEEE Trans. Ind. Informatics
Zongyu Zuo, Qing-Long Han, Boda Ning, Xiaohua Ge, Xian-Ming Zhang
2018 J jnl
Neurocomputing
Xian-Ming Zhang, Qing-Long Han, Xiaohua Ge, Derui Ding
2018 conf
ISIE
Ali Kazemy, Hoda Moodi, Bao-Lin Zhang, Xian-Ming Zhang
2018 J jnl
IEEE Trans. Cybern.
Chengda Lu, Xian-Ming Zhang, Min Wu, Qing-Long Han, Yong He
2018 J jnl
Inf. Sci.
Jia Wang, Xian-Ming Zhang, Yufeng Lin, Xiaohua Ge, Qing-Long Han
2018 conf
ANZCC
Chengda Lu, Xian-Ming Zhang, Min Wu, Qing-Long Han, Yong He
2018 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Xian-Ming Zhang, Wen-Juan Lin, Qing-Long Han, Yong He, Min Wu
2018 J jnl
IEEE Trans. Cybern.
Xian-Ming Zhang, Qing-Long Han, Zhigang Zeng
2018 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Xian-Ming Zhang, Qing-Long Han
2017 J jnl
IEEE Trans. Ind. Informatics
Xian-Ming Zhang, Qing-Long Han, Bao-Lin Zhang
2017 J jnl
Autom.
Xian-Ming Zhang, Qing-Long Han, Alexandre Seuret, Frédéric Gouaisbaut
2017 J jnl
IEEE Trans. Cybern.
Xian-Ming Zhang, Qing-Long Han, Zidong Wang, Bao-Lin Zhang
2017 J jnl
Inf. Sci.
Xian-Ming Zhang, Qing-Long Han
2016 J jnl
IEEE Trans. Cybern.
Xian-Ming Zhang, Qing-Long Han
2016 C conf
IECON
Bao-Lin Zhang, Qing-Long Han, Xian-Ming Zhang
2016 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Jia Wang, Xian-Ming Zhang, Qing-Long Han
2016 C conf
IECON
Jian-Cun Wu, Bao-Lin Zhang, Qing-Long Han, Xian-Ming Zhang
2016 C conf
IECON
Xian-Ming Zhang, Qing-Long Han
2016 J jnl
IEEE Trans. Ind. Informatics
Xian-Ming Zhang, Qing-Long Han, Xinghuo Yu
2015 J jnl
Autom.
Xian-Ming Zhang, Qing-Long Han
2015 J jnl
Autom.
Xian-Ming Zhang, Qing-Long Han
2015 C conf
IECON
Xian-Ming Zhang, Qing-Long Han
2015 C conf
INDIN
Bo Liu, Xian-Ming Zhang, Qing-Long Han
2015 C conf
IECON
Bo Liu, Xian-Ming Zhang, Qing-Long Han
2015 C conf
IECON
Mao-Mao Meng, Bao-Lin Zhang, Qing-Long Han, Xian-Ming Zhang, Haihong Wang
2014 C conf
IECON
Bo Liu, Qing-Long Han, Xian-Ming Zhang
2014 J jnl
Neural Networks
Xian-Ming Zhang, Qing-Long Han
2014 J jnl
IEEE Trans. Control. Syst. Technol.
Bao-Lin Zhang, Qing-Long Han, Xian-Ming Zhang, Xinghuo Yu
2013 C conf
IECON
Xiaohua Ge, Qing-Long Han, Fuwen Yang, Xian-Ming Zhang
2013 C conf
ACC
Xian-Ming Zhang, Qing-Long Han
2013 C conf
IECON
Xian-Ming Zhang, Qing-Long Han
2013 J jnl
Autom.
Xian-Ming Zhang, Qing-Long Han
2012 C conf
IECON
Xian-Ming Zhang, Qing-Long Han
2012 C conf
ACC
Yu-Long Wang, Qing-Long Han, Xian-Ming Zhang
2012 J jnl
IEEE Trans. Signal Process.
Xian-Ming Zhang, Qing-Long Han
2012 conf
CDC
Xian-Ming Zhang, Qing-Long Han
2011 J jnl
IEEE Trans. Neural Networks
Xian-Ming Zhang, Qing-Long Han
2010 conf
CDC
Xian-Ming Zhang, Qing-Long Han
2009 J jnl
Eur. J. Control
Xian-Ming Zhang, Qing-Long Han
2009 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Xian-Ming Zhang, Qing-Long Han
2009 conf
CDC
Xian-Ming Zhang, Qing-Long Han, Dongsheng Han
2009 J jnl
Int. J. Syst. Sci.
Xian-Ming Zhang, Minmei Li, Min Wu, Jin-Hua She
2009 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Shen-Ping Xiao, Xian-Ming Zhang
2009 J jnl
IEEE Trans. Neural Networks
Xian-Ming Zhang, Qing-Long Han
2008 J jnl
Autom.
Xian-Ming Zhang, Qing-Long Han
2006 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Xian-Ming Zhang, Qing-Long Han
2005 J jnl
Autom.
Xian-Ming Zhang, Min Wu, Jin-Hua She, Yong He
redb/extractors/decompiler/_archive/GhidraDecompilerScript-v2.java
← Index redb/extractors/decompiler/_archive/GhidraDecompilerScript-v2.java java
import ghidra.app.script.GhidraScript;
import ghidra.program.model.listing.*;
import ghidra.app.decompiler.*;
import ghidra.program.model.block.*;
import ghidra.program.model.symbol.*;
import ghidra.program.model.pcode.*;
import ghidra.program.model.address.*;
import org.json.JSONObject;
import org.json.JSONArray;
import java.security.MessageDigest;
import java.nio.charset.StandardCharsets;

public class GhidraDecompilerScript extends GhidraScript {
    private DecompInterface decompInterface;
    private BasicBlockModel basicBlockModel;

    @Override
    public void run() throws Exception {
        System.err.println("{\"debug\": \"Script starting\"}");

        // Get binary hash and filepath from arguments
        String[] args = getScriptArgs();
        if (args.length < 2) {
            System.err.println("{\"error\": \"Both SHA256 and filepath arguments are required\"}");
            return;
        }
        String sha256 = args[0];
        String filepath = args[1];

        // Add debug output after setup
        System.err.println("{\"debug\": \"Processing file: " + args[1] + "\"}");

        // Initialize analysis components
        setupDecompiler();
        basicBlockModel = new BasicBlockModel(currentProgram);

        // Create the main JSON object for output
        JSONObject output = new JSONObject();
        output.put("sha256", sha256);
        output.put("decompiled", new JSONArray());
        output.put("disassembled", new JSONArray());
        output.put("cfg", new JSONArray());

        // Process all functions
        FunctionIterator functions = currentProgram.getFunctionManager().getFunctions(true);
        for (Function function : functions) {
            processFunction(function, output);
        }

        System.err.println("{\"debug\": \"Preparing final output\"}");
        // Output the final JSON to stdout
        System.out.println(output.toString());
    }

    private void setupDecompiler() {
        decompInterface = new DecompInterface();
        DecompileOptions options = new DecompileOptions();
        decompInterface.setOptions(options);
        decompInterface.openProgram(currentProgram);
    }

    private void processFunction(Function function, JSONObject output) {
        try {
            Address entry = function.getEntryPoint();
            String functionName = function.getName();
            String functionAddress = entry.toString();

            // Process each analysis type independently
            boolean hasAnyResults = false;

            try {
                if (processDecompiledCode(function, output.getJSONArray("decompiled"),
                                        functionName, functionAddress)) {
                    hasAnyResults = true;
                }
            } catch (Exception e) {
                System.err.println(String.format(
                    "{\"error\": \"Decompilation failed for function %s: %s\"}",
                    functionName, e.getMessage().replace("\"", "'")));
            }

            try {
                if (processDisassembledCode(function, output.getJSONArray("disassembled"),
                                        functionName, functionAddress)) {
                    hasAnyResults = true;
                }
            } catch (Exception e) {
                System.err.println(String.format(
                    "{\"error\": \"Disassembly failed for function %s: %s\"}",
                    functionName, e.getMessage().replace("\"", "'")));
            }

            try {
                if (processCFG(function, output.getJSONArray("cfg"), functionAddress)) {
                    hasAnyResults = true;
                }
            } catch (Exception e) {
                System.err.println(String.format(
                    "{\"error\": \"CFG extraction failed for function %s: %s\"}",
                    functionName, e.getMessage().replace("\"", "'")));
            }

            if (!hasAnyResults) {
                System.err.println(String.format(
                    "{\"warning\": \"No results obtained for function %s\"}",
                    functionName));
            }

        } catch (Exception e) {
            System.err.println(String.format(
                "{\"error\": \"Failed to process function: %s\"}",
                e.getMessage().replace("\"", "'")));
        }
    }

    private boolean processDecompiledCode(Function function, JSONArray decompArray,
                                        String functionName, String functionAddress) {
        try {
            DecompileResults results = decompInterface.decompileFunction(function, 30, monitor);
            if (results == null || !results.decompileCompleted()) {
                System.err.println(String.format(
                    "{\"warning\": \"Decompilation incomplete for function %s\"}",
                    functionName));
                return false;
            }

            String decompiledCode = results.getDecompiledFunction().getC();
            if (decompiledCode == null || decompiledCode.trim().isEmpty()) {
                System.err.println(String.format(
                    "{\"warning\": \"Empty decompilation result for function %s\"}",
                    functionName));
                return false;
            }

            String contentHash = calculateHash(decompiledCode);

            JSONObject functionObj = new JSONObject();
            functionObj.put("decompiled_content_hash", contentHash);
            functionObj.put("decompiled_function_name", functionName);
            functionObj.put("decompiled_function_address", functionAddress);
            functionObj.put("decompiled_function", decompiledCode);

            decompArray.put(functionObj);
            return true;

        } catch (Exception e) {
            throw new RuntimeException("Decompilation error: " + e.getMessage(), e);
        }
    }

    private boolean processDisassembledCode(Function function, JSONArray disasmArray,
                                        String functionName, String functionAddress) {
        try {
            StringBuilder disassembly = new StringBuilder();
            StringBuilder normalized = new StringBuilder();
            int instructionCount = 0;
            boolean hasValidInstructions = false;

            Listing listing = currentProgram.getListing();
            AddressSetView functionBody = function.getBody();
            InstructionIterator instructions = listing.getInstructions(functionBody, true);

            while (instructions.hasNext()) {
                try {
                    Instruction instr = instructions.next();
                    if (instr != null) {
                        String disasmLine = instr.toString();
                        if (disasmLine != null && !disasmLine.trim().isEmpty()) {
                            disassembly.append(disasmLine).append("\n");
                            normalized.append(normalizeInstruction(disasmLine)).append("\n");
                            instructionCount++;
                            hasValidInstructions = true;
                        }
                    }
                } catch (Exception e) {
                    System.err.println(String.format(
                        "{\"warning\": \"Skipped invalid instruction in %s: %s\"}",
                        functionName, e.getMessage().replace("\"", "'")));
                }
            }

            if (!hasValidInstructions) {
                System.err.println(String.format(
                    "{\"warning\": \"No valid instructions found in function %s\"}",
                    functionName));
                return false;
            }

            String disassembledCode = disassembly.toString();
            String contentHash = calculateHash(disassembledCode);

            JSONObject functionObj = new JSONObject();
            functionObj.put("disassembled_content_hash", contentHash);
            functionObj.put("disassembled_function_name", functionName);
            functionObj.put("disassembled_function_address", functionAddress);
            functionObj.put("disassembled_function", disassembledCode);
            functionObj.put("normalized_disassembly", normalized.toString());
            functionObj.put("instruction_count", instructionCount);

            // Initialize similarity fields as null
            functionObj.put("minhash_signature", JSONObject.NULL);
            functionObj.put("opcode_frequency_vector", JSONObject.NULL);
            functionObj.put("api_calls_vector", JSONObject.NULL);
            functionObj.put("instruction_embedding", JSONObject.NULL);

            disasmArray.put(functionObj);
            return true;

        } catch (Exception e) {
            throw new RuntimeException("Disassembly error: " + e.getMessage(), e);
        }
    }

    private boolean processCFG(Function function, JSONArray cfgArray, String functionAddress) {
        try {
            CodeBlockIterator blocks = basicBlockModel.getCodeBlocksContaining(
                function.getBody(), monitor);

            boolean hasValidBlocks = false;

            while (blocks.hasNext()) {
                try {
                    CodeBlock block = blocks.next();
                    String blockInstructions = getBlockInstructions(block);

                    if (blockInstructions == null || blockInstructions.trim().isEmpty()) {
                        continue;
                    }

                    String blockId = calculateHash(blockInstructions);

                    JSONObject blockObj = new JSONObject();
                    blockObj.put("block_id", blockId);
                    blockObj.put("function_address", functionAddress);
                    blockObj.put("block_instructions", blockInstructions);

                    // Process successors with error handling
                    JSONArray successorAddresses = new JSONArray();
                    try {
                        CodeBlockReferenceIterator successors = block.getDestinations(monitor);
                        while (successors.hasNext()) {
                            try {
                                CodeBlockReference ref = successors.next();
                                if (ref != null && ref.getDestinationAddress() != null) {
                                    successorAddresses.put(ref.getDestinationAddress().toString());
                                }
                            } catch (Exception e) {
                                System.err.println(String.format(
                                    "{\"warning\": \"Skipped invalid successor in block %s: %s\"}",
                                    blockId, e.getMessage().replace("\"", "'")));
                            }
                        }
                    } catch (Exception e) {
                        System.err.println(String.format(
                            "{\"warning\": \"Error processing successors for block %s: %s\"}",
                            blockId, e.getMessage().replace("\"", "'")));
                    }

                    blockObj.put("successor_blocks", successorAddresses);
                    cfgArray.put(blockObj);
                    hasValidBlocks = true;

                } catch (Exception e) {
                    System.err.println(String.format(
                        "{\"warning\": \"Skipped invalid block in function %s: %s\"}",
                        functionAddress, e.getMessage().replace("\"", "'")));
                }
            }

            return hasValidBlocks;

        } catch (Exception e) {
            throw new RuntimeException("CFG extraction error: " + e.getMessage(), e);
        }
    }

    private String getBlockInstructions(CodeBlock block) {
        StringBuilder instructions = new StringBuilder();
        try {
            AddressIterator addresses = block.getAddresses(true);
            while (addresses.hasNext()) {
                try {
                    Address addr = addresses.next();
                    if (addr != null) {
                        Instruction instr = currentProgram.getListing().getInstructionAt(addr);
                        if (instr != null) {
                            instructions.append(instr.toString()).append("\n");
                        }
                    }
                } catch (Exception e) {
                    System.err.println(String.format(
                        "{\"warning\": \"Skipped invalid instruction at address %s: %s\"}",
                        addresses.next(), e.getMessage().replace("\"", "'")));
                }
            }
        } catch (Exception e) {
            System.err.println(String.format(
                "{\"warning\": \"Error getting block instructions: %s\"}",
                e.getMessage().replace("\"", "'")));
        }
        return instructions.toString();
    }

    private String normalizeInstruction(String instruction) {
        try {
            if (instruction == null || instruction.trim().isEmpty()) {
                return "";
            }
            return instruction.replaceAll("0x[0-9a-fA-F]+", "IMM")
                            .replaceAll("\\b\\d+\\b", "NUM")
                            .replaceAll("[\\[\\]\\+\\-\\*/%&|^]+", "_OP_");
        } catch (Exception e) {
            System.err.println(String.format(
                "{\"warning\": \"Error normalizing instruction: %s\"}",
                e.getMessage().replace("\"", "'")));
            return instruction;
        }
    }

    private String calculateHash(String content) {
        try {
            if (content == null || content.trim().isEmpty()) {
                return "";
            }
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] hash = digest.digest(content.getBytes(StandardCharsets.UTF_8));
            StringBuilder hexString = new StringBuilder();
            for (byte b : hash) {
                hexString.append(String.format("%02x", b));
            }
            return hexString.toString();
        } catch (Exception e) {
            System.err.println(String.format(
                "{\"error\": \"Error calculating hash: %s\"}",
                e.getMessage().replace("\"", "'")));
            return "";
        }
    }
}