Carlos Canudas-de-Wit

118 papers A* 1C 15Journal 43Unranked 59
YearRankTypeTitle / Venue / Authors
2025 conf
CDC
S. Fueyo, Carlos Canudas-de-Wit
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Manuel Campero Jurado, Carlos Canudas-de-Wit, Giovanni De Nunzio
2025 J jnl
Eur. J. Control
S. Fueyo, Carlos Canudas-de-Wit
2025 conf
ECC
Manuel Campero Jurado, Mauro Salazar, Giovanni De Nunzio, Carlos Canudas-de-Wit
2025 conf
CDC
Manuel Campero Jurado, Carlos Canudas-de-Wit, Giovanni De Nunzio, Mauro Salazar
2025 conf
CDC
Guillaume Gasnier, Murat Arcak, Kameshwar Poolla, Carlos Canudas-de-Wit
2025 J jnl
IEEE Trans. Control. Syst. Technol.
Ujjwal Pratap, Carlos Canudas-de-Wit, Federica Garin
2025 conf
ITSC
Manuel Campero Jurado, Giovanni De Nunzio, Carlos Canudas-de-Wit
2024 conf
ITSC
Manuel Campero Jurado, Carlos Canudas-de-Wit, Giovanni De Nunzio, Rémi Mourgues
2024 conf
CDC
Guillaume Gasnier, Carlos Canudas-de-Wit
2024 conf
ECC
Mladen Cicic, Carlos Canudas-de-Wit
2024 conf
ECC
Guillaume Gasnier, Carlos Canudas-de-Wit
2023 conf
ECC
Martin Rodriguez-Vega, Carlos Canudas-de-Wit, Giovanni De Nunzio, Bassel Othman
2023 J jnl
Autom.
Muhammad Umar B. Niazi, Xiaodong Cheng, Carlos Canudas-de-Wit, Jacquelien M. A. Scherpen
2023 conf
CDC
Mladen Cicic, Guillaume Gasnier, Carlos Canudas-de-Wit
2023 conf
CDC
Rémi Mourgues, Martin Rodriguez-Vega, Carlos Canudas-de-Wit
2023 J jnl
IEEE Trans. Autom. Control.
Denis Nikitin, Carlos Canudas-de-Wit, Paolo Frasca, Ursula Ebels
2022 J jnl
IEEE Trans. Autom. Control.
Denis Nikitin, Carlos Canudas-de-Wit, Paolo Frasca
2022 conf
CDC
Martin Rodriguez-Vega, Carlos Canudas-de-Wit, Hassen Fourati
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Bassel Othman, Giovanni De Nunzio, Domenico Di Domenico, Carlos Canudas-de-Wit
2022 J jnl
IEEE Trans. Autom. Control.
Liudmila Tumash, Carlos Canudas-de-Wit, Maria Laura Delle Monache
2022 J jnl
IEEE Trans. Autom. Control.
Denis Nikitin, Carlos Canudas-de-Wit, Paolo Frasca
2022 conf
CDC
Mladen Cicic, Carlos Canudas-de-Wit
2021 J jnl
CoRR
Denis Nikitin, Carlos Canudas-de-Wit, Paolo Frasca
2021 conf
CDC
Liudmila Tumash, Carlos Canudas-de-Wit, Maria Laura Delle Monache
2021 conf
CDC
Denis Nikitin, Carlos Canudas-de-Wit, Paolo Frasca
2021 conf
CDC
Muhammad Umar B. Niazi, Alain Y. Kibangou, Carlos Canudas-de-Wit, Denis Nikitin, Liudmila Tumash, Pierre-Alexandre Bliman
2021 J jnl
CoRR
Muhammad Umar B. Niazi, Alain Y. Kibangou, Carlos Canudas-de-Wit, Denis Nikitin, Liudmila Tumash, Pierre-Alexandre Bliman
2021 J jnl
Annu. Rev. Control.
Muhammad Umar B. Niazi, Alain Y. Kibangou, Carlos Canudas-de-Wit, Denis Nikitin, Liudmila Tumash, Pierre-Alexandre Bliman
2021 conf
CDC
Muhammad Umar B. Niazi, Carlos Canudas-de-Wit, Alain Y. Kibangou, Pierre-Alexandre Bliman
2021 J jnl
Eur. J. Control
Ujjwal Pratap, Carlos Canudas-de-Wit, Federica Garin
2021 conf
CDC
Bassel Othman, Giovanni De Nunzio, Domenico Di Domenico, Carlos Canudas-de-Wit
2020 J jnl
IEEE Trans. Control. Netw. Syst.
Muhammad Umar B. Niazi, Carlos Canudas-de-Wit, Alain Y. Kibangou
2020 conf
CDC
Ujjwal Pratap, Carlos Canudas-de-Wit, Federica Garin
2020 J jnl
IEEE Trans. Control. Netw. Syst.
Giacomo Casadei, Carlos Canudas-de-Wit, Sandro Zampieri
2020 J jnl
CoRR
Muhammad Umar B. Niazi, Alain Y. Kibangou, Carlos Canudas-de-Wit, Denis Nikitin, Liudmila Tumash, Pierre-Alexandre Bliman
2020 J jnl
IEEE Control. Syst. Lett.
Muhammad Umar B. Niazi, Diego Deplano, Carlos Canudas-de-Wit, Alain Y. Kibangou
2020 conf
CDC
Muhammad Umar B. Niazi, Carlos Canudas-de-Wit, Alain Y. Kibangou
2020 J jnl
IEEE Trans. Netw. Sci. Eng.
Nicolas Martin, Paolo Frasca, Carlos Canudas-de-Wit
2020 conf
ITSC
Liudmila Tumash, Carlos Canudas-de-Wit, Maria Laura Delle Monache
2020 C conf
ACC
Bassel Othman, Giovanni De Nunzio, Domenico Di Domenico, Carlos Canudas-de-Wit
2019 conf
ECC
Stephane Mollier, Maria Laura Delle Monache, Carlos Canudas-de-Wit
2019 conf
ECC
Carlos Canudas-de-Wit
2019 conf
ECC
Muhammad Umar B. Niazi, Carlos Canudas-de-Wit, Alain Y. Kibangou
2019 conf
CDC
Denis Nikitin, Carlos Canudas-de-Wit, Paolo Frasca
2019 J jnl
IEEE Trans. Control. Syst. Technol.
Pietro Grandinetti, Carlos Canudas-de-Wit, Federica Garin
2019 J jnl
Annu. Rev. Control.
Bassel Othman, Giovanni De Nunzio, Domenico Di Domenico, Carlos Canudas-de-Wit
2019 J jnl
IEEE Trans. Netw. Sci. Eng.
Nicolas Martin, Paolo Frasca, Carlos Canudas-de-Wit
2019 conf
CDC
Liudmila Tumash, Carlos Canudas-de-Wit, Maria Laura Delle Monache
2019 conf
CDC
Muhammad Umar B. Niazi, Xiaodong Cheng, Carlos Canudas-de-Wit, Jacquelien M. A. Scherpen
2019 conf
ECC
Nicolas Martin, Paolo Frasca, Takayuki Ishizaki, Jun-ichi Imura, Carlos Canudas-de-Wit
2018 conf
ITSC
Stephane Mollier, Maria Laura Delle Monache, Carlos Canudas-de-Wit
2018 conf
ECC
Nicolas Martin, Paolo Frasca, Carlos Canudas-de-Wit
2018 conf
CDC
Giacomo Casadei, Carlos Canudas-de-Wit, Sandro Zampieri
2018 conf
ECC
Andres Ladino, Carlos Canudas-de-Wit, Alain Y. Kibangou, Hassen Fourati, Martin Rodriguez
2018 J jnl
IEEE Trans. Control. Netw. Syst.
Ruggero Fabbiano, Federica Garin, Carlos Canudas-de-Wit
2018 conf
ITSC
Olga Lucía Quintero Montoya, Carlos Canudas-de-Wit
2018 conf
CDC
Martin Rodriguez-Vega, Carlos Canudas-de-Wit, Hassen Fourati
2017 J jnl
IEEE Trans. Control. Syst. Technol.
Nicolas Cardoso de Castro, Daniel E. Quevedo, Federica Garin, Carlos Canudas-de-Wit
2017 J jnl
IEEE Trans. Control. Syst. Technol.
Giovanni De Nunzio, Gabriel B. Gomes, Carlos Canudas-de-Wit, Roberto Horowitz, Philippe Moulin
2016 conf
CDC
Carlos Canudas-de-Wit, Antonella Ferrara
2016 J jnl
IEEE Trans. Control. Netw. Syst.
Dominik Pisarski, Carlos Canudas-de-Wit
2016 conf
ECC
Simon Gerwig, Bilal Sari, Federica Garin, Carlos Canudas-de-Wit
2015 J jnl
Int. J. Control
Alireza Farhadi, Jonathan Dumon, Carlos Canudas-de-Wit
2015 conf
CDC
Pietro Grandinetti, Federica Garin, Carlos Canudas-de-Wit
2014 J jnl
IEEE Trans. Autom. Control.
Lara Briñón-Arranz, Alexandre Seuret, Carlos Canudas-de-Wit
2014 conf
ECC
Carlos Canudas-de-Wit
2014 J jnl
IEEE Technol. Soc. Mag.
Alexander Artikis, Chris Baber, Pedro Bizarro, Carlos Canudas-de-Wit, Opher Etzion, Fabiana Fournier, Paul Goulart, Andrew Howes, John Lygeros, Georgios Paliouras, Assaf Schuster, Izchak Sharfman
2013 conf
ECC
Dominik Pisarski, Carlos Canudas-de-Wit
2012 C conf
ACC
Dominik Pisarski, Carlos Canudas-de-Wit
2012 conf
CDC
Dominik Pisarski, Carlos Canudas-de-Wit
2011 J jnl
IEEE Trans. Autom. Control.
Fabio Gómez-Estern, Carlos Canudas-de-Wit, Francisco R. Rubio
2011 conf
CDC/ECC
Lara Briñón-Arranz, Alexandre Seuret, Carlos Canudas-de-Wit
2011 C conf
ACC
Irinel-Constantin Morarescu, Carlos Canudas-de-Wit
2010 C conf
ACC
Rafael Barreto Jijón, Carlos Canudas-de-Wit, Silviu-Iulian Niculescu, Jonathan Dumon
2010 C conf
ACC
Brandon J. Moore, Carlos Canudas-de-Wit
2009 J jnl
IEEE Trans. Ind. Electron.
Carlos Canudas-de-Wit, Fabio Gómez-Estern, Francisco R. Rubio
2009 conf
CCA/ISIC
Haochuan Lu, Jonathan Dumon, Carlos Canudas-de-Wit
2009 conf
CDC
Brandon J. Moore, Carlos Canudas-de-Wit
2009 C conf
ACC
Riccardo Ceccarelli, Carlos Canudas-de-Wit, Philippe Moulin, Antonio Sciarretta
2009 conf
CCA/ISIC
Riccardo Ceccarelli, Philippe Moulin, Carlos Canudas-de-Wit
2009 conf
ECC
Manuel López-Martínez, Carlos Canudas-de-Wit, Francisco R. Rubio
2008 J jnl
IEEE Trans. Control. Syst. Technol.
Carlos Canudas-de-Wit, Francisco R. Rubio, Miguel A. Corchero
2008 conf
CDC
Jonathan Jaglin, Carlos Canudas-de-Wit, Cyrille Siclet
2007 J jnl
IEEE Trans. Control. Syst. Technol.
John Jairo Martinez, Carlos Canudas-de-Wit
2007 C conf
CCA
Carolina Albea, Carlos Canudas-de-Wit, Francisco Gordillo
2007 C conf
ACC
Fabio Gómez-Estern, Carlos Canudas-de-Wit, Francisco R. Rubio, José Manuel Fornés Rumbao
2007 C conf
CCA
Carlos Canudas-de-Wit, Jonathan Jaglin, Cyrille Siclet
2007 J jnl
IEEE Trans. Autom. Control.
Emmanuel Witrant, Carlos Canudas-de-Wit, Didier Georges, Mazen Alamir
2006 J jnl
IEEE Trans. Robotics
Ya-Jun Pan, Carlos Canudas-de-Wit, Olivier Sename
2006 C conf
ACC
Julien Coudon, Carlos Canudas-de-Wit, Xavier Claeys
2006 C conf
ACC
Carlos Canudas-de-Wit, Francisco R. Rubio, José Manuel Fornés Rumbao, Fabio Gómez-Estern
2006 conf
CDC
Miguel A. Corchero, Carlos Canudas-de-Wit, Francisco R. Rubio
2006 J jnl
Intell. Autom. Soft Comput.
Sid Ahmed Attia, Mazen Alamir, Carlos Canudas-de-Wit
2005 J jnl
IEEE Trans. Autom. Control.
Anton S. Shiriaev, John W. Perram, Carlos Canudas-de-Wit
2005 conf
CDC/ECC
Carlos Canudas-de-Wit, Miguel A. Corchero, Francisco R. Rubio, Eva M. Navarro-López
2005 conf
CDC/ECC
Carlos Canudas-de-Wit
2005 J jnl
Eur. J. Control
Carlos Canudas-de-Wit, Hubert Bechart, Xavier Claeys, Pietro Dolcini, John Jairo Martinez
2005 conf
CLAWAR
Jean-Matthieu Bourgeot, Carlos Canudas-de-Wit, Bernard Brogliato
2004 J jnl
Syst. Control. Lett.
Frédéric Grognard, Carlos Canudas-de-Wit
2004 C conf
ACC
Oreste Riccardo Natale, Olivier Sename, Carlos Canudas-de-Wit
2004 C conf
ACC
John Jairo Martinez, Carlos Canudas-de-Wit
2004 conf
CDC
Anton S. Shiriaev, Anders Sandberg, Carlos Canudas-de-Wit
2004 J jnl
Annu. Rev. Control.
Carlos Canudas-de-Wit
2004 conf
CDC
Ya-Jun Pan, Carlos Canudas-de-Wit, Olivier Sename
2004 C conf
CCA
Emmanuel Witrant, Carlos Canudas-de-Wit, Didier Georges, Mazen Alamir
2003 conf
CDC
Carlos Canudas-de-Wit, Morten L. Petersen, Anton S. Shiriaev
2003 conf
CDC
J. W. Grizzle, E. R. Westervelt, Carlos Canudas-de-Wit
2002 conf
CDC
Carlos Canudas-de-Wit, Ayman Youssef, Vinh Tung Nguyen-Phuoc
2002 J jnl
Autom.
Anatoli A. Pervozvanski, Carlos Canudas-de-Wit
2002 conf
CDC
Frédéric Grognard, Carlos Canudas-de-Wit
2002 conf
CDC
Carlos Vivas, Francisco R. Rubio, Carlos Canudas-de-Wit
2001 C conf
ACC
Carlos Canudas-de-Wit, Ilya V. Kolmanovsky, Jing Sun
2000 J jnl
Autom.
Carlos Canudas-de-Wit, A. D. NDoudi-Likoho
1999 conf
ECC
Xavier Claeys, Carlos Canudas-de-Wit, Hubert Bechart
1998 J jnl
IEEE Trans. Autom. Control.
Carlos Canudas-de-Wit
1998 A* conf
ICRA
Laurence Roussel, Carlos Canudas-de-Wit, Ambarish Goswami
1996 J jnl
Auton. Robots
Michel Perrier, Carlos Canudas-de-Wit
redb/extractors/decompiler/_archive/GhidraDecompilerScript-latest.java
← Index redb/extractors/decompiler/_archive/GhidraDecompilerScript-latest.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 {
        // 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];

        // 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);
        }

        // 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) {
        Address entry = function.getEntryPoint();
        String functionName = function.getName();
        String functionAddress = entry.toString();

        // Process decompiled code
        processDecompiledCode(function, output.getJSONArray("decompiled"), 
                            functionName, functionAddress);

        // Process disassembled code
        processDisassembledCode(function, output.getJSONArray("disassembled"), 
                              functionName, functionAddress);

        // Process CFG
        processCFG(function, output.getJSONArray("cfg"), functionAddress);
    }

    private void processDecompiledCode(Function function, JSONArray decompArray, 
                                     String functionName, String functionAddress) {
        DecompileResults results = decompInterface.decompileFunction(function, 30, monitor);
        if (results.decompileCompleted()) {
            String decompiledCode = results.getDecompiledFunction().getC();
            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);
        }
    }

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

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

            while (instructions.hasNext()) {
                try {
                    Instruction instr = instructions.next();
                    String disasmLine = instr.toString();
                    disassembly.append(disasmLine).append("\n");
                    normalized.append(normalizeInstruction(disasmLine)).append("\n");
                    instructionCount++;
                } catch (Exception e) {
                    System.err.println("Error processing instruction in " + functionName + ": " + e.getMessage());
                }
            }

            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);

            // Set similarity-related fields to null for now
            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);
        } catch (Exception e) {
            System.err.println("Error processing disassembly for " + functionName + ": " + e.getMessage());
        }
    }

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

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

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

                // Get successor blocks
                CodeBlockReferenceIterator successors = block.getDestinations(monitor);
                JSONArray successorAddresses = new JSONArray();
                while (successors.hasNext()) {
                    CodeBlockReference ref = successors.next();
                    successorAddresses.put(ref.getDestinationAddress().toString());
                }
                blockObj.put("successor_blocks", successorAddresses);

                cfgArray.put(blockObj);
            }
        } catch (Exception e) {
            System.err.println("{\"error\": \"Error processing CFG: " + 
                             e.getMessage().replace("\"", "'") + "\"}");
        }
    }

    private String normalizeInstruction(String instruction) {
        return instruction.replaceAll("0x[0-9a-fA-F]+", "IMM")
                        .replaceAll("\\b\\d+\\b", "NUM");
    }

    private String getBlockInstructions(CodeBlock block) {
        StringBuilder instructions = new StringBuilder();
        AddressIterator addresses = block.getAddresses(true);
        while (addresses.hasNext()) {
            Address addr = addresses.next();
            Instruction instr = currentProgram.getListing().getInstructionAt(addr);
            if (instr != null) {
                instructions.append(instr.toString()).append("\n");
            }
        }
        return instructions.toString();
    }

    private String calculateHash(String content) {
        try {
            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("{\"error\": \"Error calculating hash\"}");
            return "";
        }
    }
}