Xi-Ren Cao

113 papers A* 1B 5C 4Journal 84Unranked 17
YearRankTypeTitle / Venue / Authors
2023 J jnl
Autom.
Li Xia, Xianping Guo, Xi-Ren Cao
2021 J jnl
Autom.
Ruo-Bing Xue, Xiang-Shen Ye, Xi-Ren Cao
2020 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao
2019 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao
2018 J jnl
Autom.
Xiang-Shen Ye, Ruo-Bing Xue, Jianjun Gao, Xi-Ren Cao
2018 J jnl
Annu. Rev. Control.
Yorai Wardi, Christos G. Cassandras, Xi-Ren Cao
2018 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao
2017 J jnl
SIAM J. Control. Optim.
Jianjun Gao, Ke Zhou, Duan Li, Xi-Ren Cao
2017 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao
2017 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao
2017 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao
2016 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao
2015 J jnl
Discret. Event Dyn. Syst.
Xi-Ren Cao, Stéphane Lafortune
2015 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao
2015 ch.
Encyclopedia of Systems and Control
Xi-Ren Cao
2014 J jnl
Discret. Event Dyn. Syst.
Li Xia, Qing-Shan Jia, Xi-Ren Cao
2014 conf
WODES
Xi-Ren Cao, Xiangwei Wan
2014 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao, De-xin Wang, Li Qiu
2012 conf
CDC
Xi-Ren Cao, Xiangwei Wan
2012 J jnl
Eur. J. Oper. Res.
Li Xia, Xi-Ren Cao
2011 J jnl
Syst. Control. Lett.
De-xin Wang, Xi-Ren Cao, Li Qiu
2011 J jnl
IEEE Trans. Autom. Control.
Yan-Kai Xu, Xi-Ren Cao
2011 J jnl
Discret. Event Dyn. Syst.
Xi-Ren Cao, De-xin Wang, Tao Lu, Yifan Xu
2010 J jnl
Discret. Event Dyn. Syst.
Xi-Ren Cao
2010 J jnl
Discret. Event Dyn. Syst.
Yan-Jie Li, Fang Cao, Xi-Ren Cao
2009 conf
CDC
Xi-Ren Cao
2009 J jnl
Autom.
Junyu Zhang, Xi-Ren Cao
2009 J jnl
Autom.
Li Xia, Xi Chen, Xi-Ren Cao
2009 J jnl
Annu. Rev. Control.
Xi-Ren Cao
2009 conf
ICCMS
Yu Dai, Shaojun Liu, Li Li, Yan Li, Gang Wang, Xi-Ren Cao
2008 J jnl
Discret. Event Dyn. Syst.
Xi-Ren Cao
2008 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao, Junyu Zhang
2008 conf
CDC
Yanjia Zhao, Qianchuan Zhao, Qing-Shan Jia, Xiaohong Guan, Xi-Ren Cao
2008 J jnl
Autom.
Kan-Jian Zhang, Yan-Kai Xu, Xi Chen, Xi-Ren Cao
2008 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao, Junyu Zhang
2007 J jnl
Discret. Event Dyn. Syst.
Xi-Ren Cao
2007 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao, Xianping Guo
2007 book
Xi-Ren Cao
2007 conf
CDC
Yan-Kai Xu, Xi-Ren Cao
2006 J jnl
Queueing Syst. Theory Appl.
Ji-An Zhao, Bo Li, Xi-Ren Cao, Ishfaq Ahmad
2006 conf
CDC
Li Xia, Xi-Ren Cao
2006 conf
CDC
Fang Cao, Xi-Ren Cao
2006 J jnl
IEEE Trans. Autom. Control.
Guoxiang Gu, Xi-Ren Cao, Hesham Badr
2006 J jnl
IEEE Trans. Autom. Control.
Li Xia, Xi-Ren Cao
2006 J jnl
Autom.
Yat-wah Wan, Xi-Ren Cao
2005 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao
2005 J jnl
Discret. Event Dyn. Syst.
Xi-Ren Cao
2005 J jnl
Discret. Event Dyn. Syst.
Yiping Cheng, Da-Zhong Zheng, Kurt Rohloff, Stéphane Lafortune, Xi-Ren Cao
2005 C conf
ACC
Guoxiang Gu, Xi-Ren Cao, Hesham Badr
2005 J jnl
IEEE Trans. Signal Process.
Han-Fu Chen, Xi-Ren Cao, Haitao Fang, Jie Zhu
2005 J jnl
SIAM J. Control. Optim.
Xianping Guo, Xi-Ren Cao
2004 J jnl
Autom.
Xi-Ren Cao, Xianping Guo
2004 J jnl
IEEE J. Sel. Areas Commun.
Bin Li, Lizhong Li, Bo Li, Krishna M. Sivalingam, Xi-Ren Cao
2004 J jnl
IEEE Trans. Wirel. Commun.
Jiangchuan Liu, Bin Li, Bo Li, Xi-Ren Cao
2004 conf
CDC
Xi-Ren Cao, Xianping Guo
2004 J jnl
IEEE Trans. Autom. Control.
Haitao Fang, Xi-Ren Cao
2004 C conf
IPCCC
Brahim Bensaou, Shixin Zhuang, Xi-Ren Cao
2004 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao
2003 conf
CDC
Xi-Ren Cao
2003 conf
ICC
Lizhong Li, Bin Li, Xi-Ren Cao, Bo Li
2003 conf
CDC
Xi-Ren Cao
2003 J jnl
Discret. Event Dyn. Syst.
Xi-Ren Cao
2003 J jnl
Discret. Event Dyn. Syst.
Xi-Ren Cao
2003 J jnl
Perform. Evaluation
Xi-Ren Cao, Junjie Wang
2003 J jnl
Wirel. Networks
Bin Li, Lizhong Li, Bo Li, Xi-Ren Cao
2003 B conf
WCNC
Lizhong Li, Bin Li, Bo Li, Xi-Ren Cao
2003 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao
2003 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao, Bing Zeng
2002 J jnl
IEEE Trans. Autom. Control.
Bernd Heidergott, Xi-Ren Cao
2002 J jnl
Autom.
Xi-Ren Cao, Zhiyuan Ren, Shalabh Bhatnagar, Michael C. Fu, Steven I. Marcus
2002 J jnl
IEEE Trans. Inf. Theory
Han-Fu Chen, Xi-Ren Cao, Jie Zhu
2002 conf
ICME (1)
Jiangchuan Liu, Bin Li, Bo Li, Xi-Ren Cao
2002 conf
CDC
Xi-Ren Cao, Haitao Fang
2002 J jnl
IEEE/ACM Trans. Netw.
Xi-Ren Cao, Hong-Xia Shen, Rodolfo A. Milito, Patricia E. Wirth
2002 J jnl
Discret. Event Dyn. Syst.
Xi-Ren Cao, Guy Cohen, Alessandro Giua, Walter Murray Wonham, Jan H. van Schuppen
2001 conf
CDC
Ming He, Xi-Ren Cao
2001 B conf
GLOBECOM
Ka-Chung Lai, Xi-Ren Cao
2001 J jnl
Commun. Inf. Syst.
Xi-Ren Cao, Junjie Wang, Chin-Tau Lea
2000 J jnl
Autom.
Xi-Ren Cao
2000 C conf
ISCAS
Jie Zhu, Xi-Ren Cao, Zhi Ding
2000 conf
CDC
Xi-Ren Cao, Hong-Xia Shen
2000 J jnl
IEEE Commun. Mag.
Bo Li, Mounir Hamdi, Dongyi Jiang, Xi-Ren Cao, Y. Thomas Hou
1999 J jnl
Signal Process.
Jie Zhu, Xi-Ren Cao, Zhi Ding
1999 J jnl
IEEE J. Sel. Areas Commun.
Jie Zhu, Zhi Ding, Xi-Ren Cao
1999 J jnl
Ann. Oper. Res.
Xi-Ren Cao, Michael C. Fu, Jian-Qiang Hu
1998 J jnl
IEEE Trans. Control. Syst. Technol.
Xi-Ren Cao, Yat-wah Wan
1998 conf
ICC
Bin Li, Xi-Ren Cao
1998 C conf
ISCC
Bo Li, Yang Qin, Xi-Ren Cao
1998 B conf
SMC
Junjie Wang, Xi-Ren Cao
1998 J jnl
Comput. Networks
Dennis P. C. Iun, Xi-Ren Cao
1998 J jnl
Discret. Event Dyn. Syst.
Xi-Ren Cao
1997 B conf
ESANN
Xi-Ren Cao, Jie Zhu, Jennie Si
1997 J jnl
IEEE Trans. Autom. Control.
Han-Fu Chen, Xi-Ren Cao
1997 B conf
LCN
Junjie Wang, Khaled Ben Letaief, Mounir Hamdi, Xi-Ren Cao
1997 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao, Han-Fu Chen
1996 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao, Xue-Ming Yuan, Li Qiu
1996 J jnl
IEEE Trans. Signal Process.
Xi-Ren Cao, Ruey-Wen Liu
1996 J jnl
Perform. Evaluation
Xi-Ren Cao, Dye-Jyun Ma
1995 J jnl
IEEE/ACM Trans. Netw.
Xi-Ren Cao, Donald F. Towsley
1995 J jnl
IEEE Trans. Autom. Control.
Xi-Ren Cao, Wei-Bo Gong, Yorai Wardi
1995 J jnl
IEEE Trans. Commun.
Xi-Ren Cao
1993 J jnl
Oper. Res. Lett.
Xi-Ren Cao
1993 J jnl
SIGMETRICS Perform. Evaluation Rev.
Xi-Ren Cao
1992 J jnl
Queueing Syst. Theory Appl.
Xi-Ren Cao
1992 J jnl
Discret. Event Dyn. Syst.
Xi-Ren Cao, Dye-Jyun Ma
1992 J jnl
Perform. Evaluation
Yves Dallery, Xi-Ren Cao
1989 J jnl
Proc. IEEE
Xi-Ren Cao
1989 J jnl
IEEE Trans. Inf. Theory
Xi-Ren Cao
1988 J jnl
Oper. Res.
Xi-Ren Cao
1987 J jnl
Perform. Evaluation
Xi-Ren Cao
1985 J jnl
IEEE J. Robotics Autom.
Yu-Chi Ho, Xi-Ren Cao
1983 J jnl
Autom.
Yu-Chi Ho, Xi-Ren Cao, Christos G. Cassandras
1983 A* conf
SIGMETRICS
Rajan Suri, Xi-Ren Cao
redb/extractors/decompiler/_archive/DecompileGhidra-old.py
← Index redb/extractors/decompiler/_archive/DecompileGhidra-old.py python
from hashlib import sha256
import inspect
from pathlib import Path
import subprocess
import json
import subprocess
import json
import os
import tempfile
import uuid
import shutil
import time

from dotenv import load_dotenv

from redb.extractors.enum import Tag
from redb.models.dataclasses import Decompiled
from redb.extractors.extractor import Extractor


class DecompileGhidra(Extractor):
    def __init__(
        self,
        filepath,
        log,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
    ):
        super().__init__(
            filepath, log, index_prefix, elastic_index, known_benign, known_malicious
        )
        self.log.debug(inspect.currentframe().f_code.co_name)
        self.elastic_index = self.index_prefix + "-ghidra"
        self.ghidra_path = "/opt/ghidra"
        self.java_script_path = (
            self.ghidra_path
            + "/Ghidra/Features/Base/ghidra_scripts/GhidraDecompilerScript.java"
        )
        self.decompiled = None
        load_dotenv()
        self.decompiled_folder = os.getenv("DECOMPILED_FOLDER", "/opt/decompiled")
        self.log.debug(f"Decompiled folder: {self.decompiled_folder}")

    def run_command(self, cmd, env=None):
        try:
            self.log.info(f"Starting command: {' '.join(cmd)}")
            start_time = time.time()
            TIMEOUT = 1200  # 20 minutes in seconds
            process = subprocess.Popen(
                cmd, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
            )

            while True:
                output = process.stdout.readline()
                if output:
                    print(output.strip())
                if process.poll() is not None:
                    break
            try:
                stdout, stderr = process.communicate(timeout=TIMEOUT)
            except subprocess.TimeoutExpired:
                process.kill()
                self.log.error(f"Ghidra timed out after {TIMEOUT} seconds")
                # raise subprocess.TimeoutExpired(process.args, TIMEOUT)
                return None
            end_time = time.time()

            self.log.debug(
                f"Command finished. Execution time: {end_time - start_time:.2f} seconds"
            )
            self.log.debug(f"Return code: {process.returncode}")

            if process.returncode != 0:
                self.log.error(f"Error output:\n{stderr}")
                return None
            return stdout
        except Exception as e:
            self.log.error(f"Error running command {' '.join(cmd)}: {e}")
            return None

    def analyze_binary(self):
        self.log.debug(f"Ghidra path: {self.ghidra_path}")
        self.log.debug(f"Binary path: {self.filepath}")
        self.log.debug(f"Java script path: {self.java_script_path}")

        # Check if Java script exists
        if not os.path.exists(self.java_script_path):
            self.log.error(f"Error: Java script not found at {self.java_script_path}")
            return None

        # Set up environment variables
        env = os.environ.copy()
        java_home = "/usr/lib/jvm/java-17-openjdk-amd64"  # Adjust this path if needed
        env["JAVA_HOME"] = java_home
        env["PATH"] = f"{java_home}/bin:{env['PATH']}"
        env["LD_LIBRARY_PATH"] = f"{java_home}/lib:{env.get('LD_LIBRARY_PATH', '')}"
        env["DECOMPILED_FOLDER"] = self.decompiled_folder

        # Print environment variables for debugging
        self.log.debug(f"JAVA_HOME: {env['JAVA_HOME']}")
        self.log.debug(f"PATH: {env['PATH']}")
        self.log.debug(f"LD_LIBRARY_PATH: {env['LD_LIBRARY_PATH']}")

        # Check Ghidra installation
        analyzeHeadless_path = f"{self.ghidra_path}/support/analyzeHeadless"
        self.log.debug(
            f"analyzeHeadless exists: {os.path.exists(analyzeHeadless_path)}"
        )

        # Create a temporary project directory
        project_path = tempfile.gettempdir() + "/ghidra_" + str(uuid.uuid4())
        os.makedirs(project_path, exist_ok=True)
        self.log.debug(f"Created temporary project path: {project_path}")
        output_file = ""

        try:
            # Run Ghidra's headless analyzer
            analyze_cmd = [
                analyzeHeadless_path,
                project_path,
                "TempProject",
                "-import",
                self.filepath,
                "-postScript",
                self.java_script_path,
                self.sha256,
                "-deleteProject",
            ]

            result = self.run_command(analyze_cmd, env=env)
            if result is None:
                return None

            # Read the output JSON file
            output_file = os.path.join(
                self.decompiled_folder, self.sha256 + "-decompiled.json"
            )
            if os.path.exists(output_file):
                with open(output_file, "r") as f:
                    functions = json.load(f)
                return functions
            else:
                self.log.error(
                    f"Output file {output_file} not found. Ghidra analysis may have failed."
                )
                return None
        finally:
            # Clean up
            if os.path.exists(project_path):
                shutil.rmtree(project_path)
                self.log.debug(f"Deleted temporary project path: {project_path}")

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            functions = self.analyze_binary()

            if functions:
                self.log.info(f"Extracted functions from {self.filepath}:")
                for func in functions:
                    id = sha256(func["address"].encode()).hexdigest()
                    self.decompiled = Decompiled(
                        _id=id,
                        decompiled_function_name=func["name"],
                        decompiled_function_address=func["address"],
                        decompiled_function=func["decompiled"],
                    )
                    self.export_to_elastic([self.decompiled])
            else:
                self.log.error("No decompiled functions extracted.")
            return True
        except Exception as e:
            self.log.error(f"Error extracting decompiled information: {e}")
            return None

    def tag(self):
        return Tag.DECOMPILED.value