Makoto Mizukawa

47 papers A* 3A 10B 4C 1Journal 13Unranked 16
YearRankTypeTitle / Venue / Authors
2016 conf
ICIRA (2)
Kazuma Fujimoto, Takeshi Sasaki, Midori Sugaya, Takashi Yoshimi, Makoto Mizukawa, Nobuto Matsuhira
2015 conf
ASCC
Eiji Kobayashi, Takashi Yoshimi, Nobuto Matsuhira, Makoto Mizukawa, Yoshinobu Ando
2014 J jnl
Int. J. Mechatronics Autom.
Weerachai Skulkittiyut, Haeyeon Lee, Trung Ngo Lam, Makoto Mizukawa
2014 J jnl
J. Robotics Mechatronics
Yukihiro Nakamura, Shin-yo Muto, Yoshio Maeda, Makoto Mizukawa, Manabu Motegi, Youichi Takashima
2013 conf
URAI
Ken Hashimoto, Takashi Yoshimi, Makoto Mizukawa, Yoshinobu Ando, Kiyoaki Takeuchi
2013 conf
ARSO
Weerachai Skulkittiyut, Haeyeon Lee, Trung Ngo Lam, Quang Tran Minh, Muhammad Ariff Baharudin, Takashi Fujioka, Eiji Kamioka, Makoto Mizukawa
2013 conf
AIM
Mohd Azizi Abdul Rahman, Makoto Mizukawa
2013 conf
HCI (29)
Weerachai Skulkittiyut, Haeyeon Lee, Trung Ngo Lam, Makoto Mizukawa
2013 C conf
IECON
Takashi Yoshimi, Yuu Ohnuki, Kazutaka Yaguchi, Yoshinobu Ando, Makoto Mizukawa
2013 B conf
KES
Anna Ohira, Trung Ngo Lam, Makoto Mizukawa, Yoshinobu Ando, Takashi Yoshimi
2012 B conf
RO-MAN
Trung Ngo Lam, Yoshio Maeda, Haeyeon Lee, Makoto Mizukawa
2012 A* conf
ICRA
Trung Ngo Lam, Haeyeon Lee, Katsuhiro Mayama, Makoto Mizukawa
2012 conf
ARSO
Takashi Yoshimi, Naoyuki Iwata, Makoto Mizukawa, Yoshinobu Ando
2012 conf
SII
Yukihiro Nakamura, Shin-yo Muto, Manabu Motegi, Makoto Mizukawa
2012 conf
SII
Yoshio Maeda, Takashi Yoshimi, Yoshinobu Ando, Makoto Mizukawa
2011 conf
URAI
Yuhki Ishiguro, Yoshio Maeda, Trung Ngo Lam, Takeshi Sakamoto, Makoto Mizukawa, Takashi Yoshimi, Yoshinobu Ando
2011 J jnl
J. Robotics Mechatronics
Trung Lam Ngo, Haeyeon Lee, Makoto Mizukawa
2011 conf
RiiSS
Trung Lam Ngo, Haeyeon Lee, Makoto Mizukawa
2011 J jnl
J. Robotics Mechatronics
Naomi Miyake, Fumi Seto, Makoto Mizukawa, Shinya Kotosaka, Tomomasa Sato
2011 J jnl
J. Adv. Comput. Intell. Intell. Informatics
Kanlaya Rattanyu, Makoto Mizukawa
2011 conf
HCI (3)
Kanlaya Rattanyu, Makoto Mizukawa
2011 J jnl
J. Robotics Mechatronics
Shin'ya Morijiri, Yoshinobu Ando, Takashi Yoshimi, Makoto Mizukawa
2011 J jnl
J. Robotics Mechatronics
Shin'ichi Yuta, Makoto Mizukawa, Hideki Hashimoto, Hirofumi Tashiro, Tsuyoshi Okubo
2010 A conf
IROS
Trung Lam Ngo, Ken Ukai, Makoto Mizukawa
2010 J jnl
J. Robotics Mechatronics
Hajime Fujii, Yoshinobu Ando, Takashi Yoshimi, Makoto Mizukawa
2010 J jnl
J. Robotics Mechatronics
Masaharu Shimizu, Nobuyuki Kita, Toshihisa Saito, Eijiro Takeuchi, Yusuke Nakajima, Naohito Takegawa, Hiroki Igarashi, Yasuo Hayashibara, Hideaki Yamato, Kengo Toda, Takayuki Furuta, Makoto Mizukawa
2009 J jnl
J. Robotics Mechatronics
Yusuke Fukusato, Eri Sato-Shimokawara, Toru Yamaguchi, Makoto Mizukawa
2009 J jnl
J. Robotics Mechatronics
Makoto Mizukawa, Kazuhito Yokoi, Tsutomu Hasegawa, Shigeki Sugano, Yasushi Nakauchi
2009 J jnl
J. Robotics Mechatronics
Le Dung, Makoto Mizukawa
2009 B conf
FUZZ-IEEE
Toshihiro Kato, Ken Ukai, Yuki Kodama, Yousuke Tsukumori, Yoshinobu Ando, Makoto Mizukawa
2009 B conf
FUZZ-IEEE
Ken Ukai, Yoshinobu Ando, Makoto Mizukawa
2009 J jnl
J. Robotics Mechatronics
Ken Ukai, Yoshinobu Ando, Makoto Mizukawa
2007 conf
CIRA
Le Dung, Makoto Mizukawa
2006 A conf
IROS
Takahiro Suzuki, Yuji Ebihara, Yoshinobu Ando, Makoto Mizukawa
2004 A conf
IROS
Kenichi Ohara, Kohtaro Ohba, Tamio Tanikawa, Masahiko Hiraki, Soichi Wakatsuki, Makoto Mizukawa
2003 A conf
IROS
Kenichi Ohara, Makoto Mizukawa, Kohtaro Ohba, Tamio Tanikawa
2003 conf
CIRA
Makoto Mizukawa, Kazuto Endo, Takayuki Otsuka, Yoshinobu Ando
2002 A conf
IROS
Makoto Mizukawa, Yukihiro Nakamura, Hiroyuki Ogata, Yoshimasa Yanagihira
2000 conf
ICPADS Workshops
Akihiro Matsumoto, Makoto Mizukawa, Toshihiko Koyama, Hideo Matsuka
1999 A conf
IROS
Masaaki Uechi, Hiroyuki Ogata, Yukihiro Nakamura, Makoto Mizukawa
1998 A conf
IROS
Ayako Takenouchi, Naoyoshi Kanamaru, Makoto Mizukawa
1998 A* conf
ICRA
Yukihiro Nakamura, Kazunori Kanayama, Makoto Mizukawa
1998 A conf
IROS
Makoto Mizukawa, Kazunori Kanayama, Yukihiro Nakamura
1997 A* conf
ICRA
Hiroyuki Ogata, Makoto Mizukawa
1996 A conf
IROS
Yukihiro Nakamura, Makoto Mizukawa, Kazunori Kanayama
1995 conf
IROS (1)
Satoru Matsuo, Kenichiro Shimokura, Yukihiro Kubota, Eiji Mitsuya, Makoto Mizukawa
1994 A conf
IROS
Makoto Mizukawa, Eiji Mitsuya, Shuichi Ohara, Satoshi Iwaki, Satoru Matsuo, Takeshi Shakunaga, Takashi Okada
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 "";
        }
    }
}