Caecilia Charbonnier

27 papers A* 2C 2Journal 14Unranked 9
YearRankTypeTitle / Venue / Authors
2026 J jnl
ACM Comput. Surv.
Pierre Nagorny, Bart Kevelham, Sylvain Chagué, Caecilia Charbonnier
2025 conf
ISMAR-Adjunct
Joan Llobera, Ke Li, Pierre Nagorny, Caecilia Charbonnier, Frank Steinicke
2025 conf
VR Workshops
Fariba Mostajeran, Ke Li, Sebastian Rings, Lucie Kruse, Erik Wolf, Susanne Schmidt, Michael Arz, Joan Llobera, Pierre Nagorny, Caecilia Charbonnier, Hannes Fassold, Xenxo Alvarez, André Tavares, Nuno Santos, João Orvalho, Sergi Fernández, Frank Steinicke
2024 J jnl
Multim. Tools Appl.
Henrique Galvan Debarba, Mario Montagud, Sylvain Chagué, Javier Garcia-Lajara Herrero, Ignacio Lacosta, Sergi Fernández Langa, Caecilia Charbonnier
2022 J jnl
IEEE Trans. Vis. Comput. Graph.
Henrique Galvan Debarba, Sylvain Chagué, Caecilia Charbonnier
2022 conf
VR Workshops
Joan Llobera, Caecilia Charbonnier
2021 conf
VR Workshops
Ana Revilla, Sergio Zamarvide, Ignacio Lacosta, Fernando Pérez, Javier Lajara, Bart Kevelham, Valérie Juillard, Brian Rochat, Michelle Drocco, Natasha Devaud, Olivier Barbeau, Caecilia Charbonnier, Patrick de Lange, Jie Li, Yanni Mei, Kinga Lawicka, Jack Jansen, Nacho Reimat, Shishir Subramanyam, Pablo César
2021 J jnl
CoRR
Anargyros Chatzitofis, Leonidas Saroglou, Prodromos Boutis, Petros Drakoulis, Nikolaos Zioulis, Shishir Subramanyam, Bart Kevelham, Caecilia Charbonnier, Pablo César, Dimitrios Zarpalas, Stefanos D. Kollias, Petros Daras
2021 C conf
IMX
Joan Llobera, Caecilia Charbonnier
2021 conf
SIGGRAPH Courses
Joan Llobera, Joe Booth, Caecilia Charbonnier
2020 J jnl
CoRR
Henrique Galvan Debarba, Mario Montagud, Sylvain Chagué, Javier Lajara, Ignacio Lacosta, Sergi Fernández Langa, Caecilia Charbonnier
2020 J jnl
IEEE Access
Anargyros Chatzitofis, Leonidas Saroglou, Prodromos Boutis, Petros Drakoulis, Nikolaos Zioulis, Shishir Subramanyam, Bart Kevelham, Caecilia Charbonnier, Pablo César, Dimitrios Zarpalas, Stefanos D. Kollias, Petros Daras
2020 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Caecilia Charbonnier, Victoria B. Duthon, Sylvain Chagué, Frank C. Kolo, Jacques Menetrey
2018 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Caecilia Charbonnier, Sylvain Chagué, Bart Kevelham, Delphine Preissmann, Frank C. Kolo, Olivier Rime, Alexandre Lädermann
2018 A* conf
VR
Henrique Galvan Debarba, Marcelo Elias de Oliveira, Alexandre Lädermann, Sylvain Chagué, Caecilia Charbonnier
2018 conf
SVR
Henrique Galvan Debarba, Marcelo Elias de Oliveira, Alexandre Lädermann, Sylvain Chagué, Caecilia Charbonnier
2018 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Caecilia Charbonnier, Alexandre Lädermann, Bart Kevelham, Sylvain Chagué, Pierre Hoffmeyer, Nicolas Holzer
2018 A* conf
VR
Henrique Galvan Debarba, Marcelo Elias de Oliveira, Alexandre Lädermann, Sylvain Chaqué, Caecilia Charbonnier
2016 conf
VRIC
Sylvain Chagué, Caecilia Charbonnier
2015 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Jérôme Schmid, Christophe Chênes, Sylvain Chagué, Pierre Hoffmeyer, Panayiotis Christofilopoulos, Massimiliano Bernardoni, Caecilia Charbonnier
2015 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Caecilia Charbonnier, Sylvain Chagué, Frank C. Kolo, Alexandre Lädermann
2014 conf
NIME
Alain Renaud, Caecilia Charbonnier, Sylvain Chagué
2010 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Caecilia Charbonnier, Nadia Magnenat-Thalmann, Christoph D. Becker, Pierre Hoffmeyer, Jacques Menetrey
2009 J jnl
Comput. Animat. Virtual Worlds
Lazhari Assassi, Caecilia Charbonnier, Jérôme Schmid, Pascal Volino, Nadia Magnenat-Thalmann
2009 J jnl
Vis. Comput.
Caecilia Charbonnier, Lazhari Assassi, Pascal Volino, Nadia Magnenat-Thalmann
2009 conf
Eurographics (Medical Prize)
Caecilia Charbonnier, Jérôme Schmid, Frank C. Kolo, Nadia Magnenat-Thalmann, Christoph D. Becker, Pierre Hoffmeyer
2008 C conf
MMSP
Nadia Magnenat-Thalmann, Caecilia Charbonnier, Jérôme Schmid
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