Kaifeng Yang

40 papers A* 1A 4B 4C 5Misc 1Journal 15Unranked 7
YearRankTypeTitle / Venue / Authors
2026 J jnl
Trans. Inst. Meas. Control
Kaifeng Yang, Haifeng Li, Shihua Li
2025 B conf
CEC
Xilu Wang, Kaifeng Yang, Peng Liao, Mengxuan Zhang, Yaochu Jin
2024 A conf
GECCO
Kirill Antonov, Roman Kalkreuth, Kaifeng Yang, Thomas Bäck, Niki van Stein, Anna V. Kononova
2024 J jnl
CoRR
Kirill Antonov, Roman Kalkreuth, Kaifeng Yang, Thomas Bäck, Niki van Stein, Anna V. Kononova
2024 conf
EUROCAST (3)
Kaifeng Yang, Bernhard Werth, Michael Affenzeller
2024 J jnl
Nat. Comput.
Bogdan Burlacu, Kaifeng Yang, Michael Affenzeller
2024 A* conf
ICML
Hao Wang, Kaifeng Yang, Michael Affenzeller
2024 J jnl
IEEE Trans. Instrum. Meas.
Bowei Dong, Yuliang Liu, Kaifeng Yang, Jiajian Cao
2023 conf
GECCO Companion
Kaifeng Yang, Kai Chen, Michael Affenzeller, Bernhard Werth
2023 ch.
Many-Criteria Optimization and Decision Analysis
Hao Wang, Kaifeng Yang
2023 C conf
IJCCI
Fu Xing Long, Diederick Vermetten, Anna V. Kononova, Roman Kalkreuth, Kaifeng Yang, Thomas Bäck, Niki van Stein
2023 J jnl
CoRR
Fu Xing Long, Diederick Vermetten, Anna V. Kononova, Roman Kalkreuth, Kaifeng Yang, Thomas Bäck, Niki van Stein
2023 conf
ICNC-FSKD
Kaifeng Yang, Sixuan Liu, Michael Affenzeller, Guozhi Dong
2023 J jnl
Multim. Syst.
Weidong Zhu, Jun Sun, Simin Wang, Kaifeng Yang, Jifeng Shen, Xin Zhou
2023 C conf
EMO
Kaifeng Yang, Michael Affenzeller
2023 conf
GECCO Companion
Bernhard Werth, Johannes Karder, Andreas Beham, Erik Pitzer, Kaifeng Yang, Stefan Wagner
2022 J jnl
CoRR
Kaifeng Yang, Guozhi Dong, Michael Affenzeller
2022 J jnl
Swarm Evol. Comput.
Kaifeng Yang, Michael Affenzeller, Guozhi Dong
2022 J jnl
Multim. Tools Appl.
Jun Sun, Kaifeng Yang, Xiaofei He, Yuanqiu Luo, Xiaohong Wu, Jifeng Shen
2022 Misc conf
SYNASC
Michael Affenzeller, Michael Bögl, Lukas Fischer, Florian Sobieczky, Kaifeng Yang, Jan Zenisek
2022 J jnl
CoRR
Hao Wang, Kaifeng Yang, Michael Affenzeller, Michael Emmerich
2022 J jnl
IEEE Trans. Instrum. Meas.
Kaifeng Yang, Yuliang Liu, Shiwen Zhang, Jiajian Cao
2022 J jnl
Comput. Electron. Agric.
Jun Sun, Kaifeng Yang, Chen Chen, Jifeng Shen, Yu Yang, Xiaohong Wu, Tomas Norton
2021 C conf
ISM
Kaifeng Yang, Michael Affenzeller
2020 ch.
High-Performance Simulation-Based Optimization
Michael T. M. Emmerich, Kaifeng Yang, André H. Deutz
2019 A conf
GECCO
Kaifeng Yang, Pramudita Satria Palar, Michael Emmerich, Koji Shimoyama, Thomas Bäck
2019 J jnl
CoRR
Kaifeng Yang, Michael Emmerich, André H. Deutz, Thomas Bäck
2019 J jnl
J. Glob. Optim.
Kaifeng Yang, Michael Emmerich, André H. Deutz, Thomas Bäck
2019 J jnl
Swarm Evol. Comput.
Kaifeng Yang, Michael Emmerich, André H. Deutz, Thomas Bäck
2019 C conf
EMO
André H. Deutz, Michael Emmerich, Kaifeng Yang
2018 A conf
GECCO
Pramudita Satria Palar, Kaifeng Yang, Koji Shimoyama, Michael Emmerich, Thomas Bäck
2017 B conf
CEC
Yali Wang, Longmei Li, Kaifeng Yang, Michael T. M. Emmerich
2017 C conf
EMO
Kaifeng Yang, Michael Emmerich, André H. Deutz, Carlos M. Fonseca
2016 ch.
Advances in Stochastic and Deterministic Global Optimization
Michael Emmerich, Kaifeng Yang, André H. Deutz, Hao Wang, Carlos M. Fonseca
2016 conf
ICNC-FSKD
Kaifeng Yang, Longmei Li, André H. Deutz, Thomas Bäck, Michael Emmerich
2016 conf
ICNC-FSKD
Zhiwei Yang, Hao Wang, Kaifeng Yang, Thomas Bäck, Michael Emmerich
2016 B conf
CEC
Kaifeng Yang, André H. Deutz, Zhiwei Yang, Thomas Bäck, Michael T. M. Emmerich
2015 B conf
CEC
Kaifeng Yang, Daniel Gaida, Thomas Bäck, Michael Emmerich
2015 conf
EMO (2)
Iris Hupkens, André H. Deutz, Kaifeng Yang, Michael T. M. Emmerich
2014 A conf
PPSN
Kaifeng Yang, Michael T. M. Emmerich, Rui Li, Ji Wang, Thomas Bäck
redb/extractors/decompiler/bninja/analysis/medium_level.py
← Index redb/extractors/decompiler/bninja/analysis/medium_level.py python
import time

from binaryninja import (
    MediumLevelILOperation as MLIL_OP,
)

try:
    from ..function_type import FunctionTypeAnalysis
    from ..similarity.minhasher import MinHasher, TokenKind
    from ..utils.hashes import calculate_sha256, calculate_tlsh
    from .medium_level_normalization import MediumLevelNormalization
except ImportError:
    from redb.extractors.decompiler.bninja.analysis.medium_level_normalization import MediumLevelNormalization
    from redb.extractors.decompiler.bninja.similarity.minhasher import MinHasher
    from redb.extractors.decompiler.bninja.function_type import FunctionTypeAnalysis
    from redb.extractors.decompiler.bninja.utils.hashes import calculate_sha256, calculate_tlsh


_MLIL_CALL_OPS = (
    MLIL_OP.MLIL_CALL,
    MLIL_OP.MLIL_CALL_SSA,
    MLIL_OP.MLIL_CALL_UNTYPED,
    MLIL_OP.MLIL_CALL_UNTYPED_SSA,
    MLIL_OP.MLIL_TAILCALL,
    MLIL_OP.MLIL_TAILCALL_SSA,
    MLIL_OP.MLIL_TAILCALL_UNTYPED,
    MLIL_OP.MLIL_TAILCALL_UNTYPED_SSA,
)

_MLIL_CONTROL_FLOW_OPS = (
    MLIL_OP.MLIL_IF,
    MLIL_OP.MLIL_GOTO,
    MLIL_OP.MLIL_JUMP,
    MLIL_OP.MLIL_JUMP_TO,
    MLIL_OP.MLIL_RET,
    MLIL_OP.MLIL_RET_HINT,
    MLIL_OP.MLIL_NORET,
) + _MLIL_CALL_OPS


class MediumLevelAnalysis:
    def __init__(self, function, bv, logger):
        self.function = function
        self.name = function.name
        self.start = function.start
        self.mlil_func = function.mlil
        self.bv = bv
        self.logger = logger
        self.errors = []

    def log_error(self, message, function_name, address, exception=None, error_location="unknown"):
        error_msg = f"Error in function {function_name} at {address}: {message}"
        if exception:
            error_msg += f" - {str(exception)}"
        self.logger.error(error_msg)

        error = {
            "function_name": function_name,
            "function_address": str(address),
            "error_location": error_location,
            "error_message": message,
            "error_details": str(exception) if exception else "",
            "error_type": type(exception).__name__ if exception else "Unknown",
            "timestamp": int(time.time() * 1000),
        }
        self.errors.append(error)

    def _collect_mlil_skeleton_and_typed(self):
        mlil = self.mlil_func
        if not mlil:
            return [], [], [], []

        start = self.start
        norm = MediumLevelNormalization()

        skeleton = []
        skeleton_with_addr = []
        typed = []
        typed_with_addr = []

        for il in mlil.instructions:
            skel_norm = norm.normalize_instruction_all_levels(il)
            typed_norm = norm.normalize_instr_with_operands(il)

            skeleton.append(skel_norm)
            typed.append(typed_norm)

            offset = il.address - start
            if offset < 0:
                offset = 0

            skeleton_with_addr.append((offset, skel_norm))
            typed_with_addr.append((offset, typed_norm))

        return skeleton, skeleton_with_addr, typed, typed_with_addr

    def analyze(self):
        (
            instr_skeleton,
            body_mlil_skeleton_vector,
            instr_typed,
            body_mlil_typed_vector,
        ) = self._collect_mlil_skeleton_and_typed()

        instr_skeleton_str = str(instr_skeleton)
        sha256_skeleton = calculate_sha256(instr_skeleton_str)
        tlsh_skeleton = calculate_tlsh(instr_skeleton_str)

        instr_typed_str = str(instr_typed)
        sha256_typed = calculate_sha256(instr_typed_str)
        tlsh_typed = calculate_tlsh(instr_typed_str)

        seed = 0xdeadbeef
        minhash_mlil_skeleton = MinHasher(seed, self.mlil_func, TokenKind.MLIL).calculateMinHash()
        minhash_mlil_typed = MinHasher(seed, self.mlil_func, TokenKind.TYPED_MLIL).calculateMinHash()

        medium_level_json = {
            "function_address": self.start,
            "body_mlil_skeleton_vector": body_mlil_skeleton_vector,
            "sha256_mlil_skeleton": sha256_skeleton,
            "tlsh_mlil_skeleton": tlsh_skeleton,
            "minhash_mlil_skeleton": minhash_mlil_skeleton,
            "body_mlil_typed_vector": body_mlil_typed_vector,
            "sha256_mlil_typed": sha256_typed,
            "tlsh_mlil_typed": tlsh_typed,
            "minhash_mlil_typed": minhash_mlil_typed,
        }

        return medium_level_json, self.errors