Oriol Bertran-Pardo

21 papers B 1Journal 5Unranked 15
YearRankTypeTitle / Venue / Authors
2021 conf
OFC
Bruno Lavigne, Maël Le Monnier, Thierry Zami, Dirk Bode, Giuseppe A. Azzini, Roberto Peruta, Luca Suberini, Sergio Jovane, Oriol Bertran-Pardo, Amirhossein Ghazisaeidi
2021 conf
OFC
Serge Melle, Thierry Zami, Oriol Bertran-Pardo, Bruno Lavigne
2020 conf
ECOC
Thierry Zami, Bruno Lavigne, Oriol Bertran-Pardo
2020 conf
ECOC
Aymeric Arnould, Haïk Mardoyan, Florian Pulka, Amirhossein Ghazisaeidi, Vahid Aref, B. Bordez, P. Tondo, L. Dalle Cort, Erwan Pincemin, Nicolas Brochier, F. Chatter, V. Guillot-Common, Oriol Bertran-Pardo, Massimo Frascolla, L. Luchesini, Jeremie Renaudier
2020 J jnl
JOCN
Thierry Zami, Bruno Lavigne, Ivan Fernandez de Jauregui Ruiz, Marco Bertolini, Yuan-Hua Claire Kao, Oriol Bertran-Pardo, Mathieu Lefrançois, Florian Pulka, Sethumadhavan Chandrasekhar, Junho Cho, Xi Chen, Di Che, Ellsworth Burrows, Peter Winzer, Jelena Pesic, Nicola Rossi
2019 conf
OFC
Marco Bertolini, Bruno Lavigne, Thierry Zami, Yuan-Hua Claire Kao, Oriol Bertran-Pardo
2018 conf
OFC
Thierry Zami, Bruno Lavigne, Oriol Bertran-Pardo, Stefan Weisser, Julien David, Maël Le Monnier, Jean-Paul Faure
2016 conf
OFC
Bruno Lavigne, Mathieu Lefrançois, Oriol Bertran-Pardo, Maël Le Monnier, Lutz Raddatz, Stefan Weisser, Roberto Peruta, Giuseppe A. Azzini, Luca Suberini
2015 conf
OFC
Bruno Lavigne, Oriol Bertran-Pardo, Christine Bresson, Mathieu Lefrançois, Elodie Balmefrezol, Maël Le Monnier, Lutz Raddatz, L. Suberini
2015 conf
OFC
Oriol Bertran-Pardo, Thierry Zami, Bruno Lavigne, Maël Le Monnier
2015 J jnl
JOCN
Annalisa Morea, Jérémie Renaudier, Thierry Zami, Amirhossein Ghazisaeidi, Oriol Bertran-Pardo
2014 conf
OFC
Annalisa Morea, Jérémie Renaudier, Amirhossein Ghazisaeidi, Oriol Bertran-Pardo, Thierry Zami
2014 conf
OFC
Haïk Mardoyan, Oriol Bertran-Pardo, Philippe Jennevé, Guilhem de Valicourt, M. A. Mestre, Sébastien Bigo, Christophe Kazmierski, N. Chimot, Andreas G. Steffan, Jörg Honecker, R. Zhang, Patrick Runge, André Richter, Cristina Arellano, Alejandro Ortega-Moñux, Íñigo Molina-Fernández
2014 conf
OFC
Guilhem de Valicourt, M. A. Mestre, Philippe Jennevé, Haïk Mardoyan, Jean-Christophe Antona, Sébastien Bigo, Oriol Bertran-Pardo, Christophe Kazmierski, N. Chimot, Fabrice Blache, Alexandre Garreau
2013 J jnl
Bell Labs Tech. J.
Jean Godin, Agnieszka Konczykowska, Jean-Yves Dupuy, Muriel Riet, Virginie Nodjiadjim, Filipe Jorge, Gabriel Charlet, Oriol Bertran-Pardo, Jérémie Renaudier, Haïk Mardoyan, Alan H. Gnauck, Peter J. Winzer
2013 conf
OFC/NFOEC
Amirhossein Ghazisaeidi, Patrice Tran, Patrick Brindel, Oriol Bertran-Pardo, Jeremie Renaudier, Gabriel Charlet, Sébastien Bigo
2013 conf
OFC/NFOEC
Oriol Bertran-Pardo, Jeremie Renaudier, Patrice Tran, Haïk Mardoyan, Patrick Brindel, Amirhossein Ghazisaeidi, Massimiliano Salsi, Gabriel Charlet, Sébastien Bigo
2013 conf
OFC/NFOEC
Oriol Bertran-Pardo, Jeremie Renaudier, Haïk Mardoyan, Patrice Tran, Rafael Rios-Müller, Agnieszka Konczykowska, Jean-Yves Dupuy, Filipe Jorge, Muriel Riet, Bernadette Duval, Jean Godin, Sebastian Randel, Gabriel Charlet, Sébastien Bigo
2010 J jnl
Bell Labs Tech. J.
Jérémie Renaudier, Oriol Bertran-Pardo, Gabriel Charlet, Massimiliano Salsi, Haïk Mardoyan, Patrice Tran, Sébastien Bigo
2010 J jnl
Bell Labs Tech. J.
Massimiliano Salsi, Gabriel Charlet, Jérémie Renaudier, Oriol Bertran-Pardo, Haïk Mardoyan, Sébastien Bigo, Philippe Plantady, Alain Calsat
2009 B conf
GLOBECOM
Oriol Bertran-Pardo, Jeremie Renaudier, Gabriel Charlet, Patrice Tran, Haïk Mardoyan, Massimiliano Salsi, Marco Bertolini, Sébastien Bigo
tests/unit/test_decompile_arch.py
← Index tests/unit/test_decompile_arch.py python
"""Unit tests for architecture modules:
- bninja/arch/creator.py
- bninja/arch/x86.py
"""
import sys
import pytest

# Install binaryninja stubs before importing arch modules
from tests.unit.conftest_binja_stubs import install_binja_stubs
install_binja_stubs()

from redb.extractors.decompiler.bninja.arch.creator import ArchitectureCreator
from redb.extractors.decompiler.bninja.arch.x86 import Arch_x86


# ============================================================================
# 3a. ArchitectureCreator
# ============================================================================

class TestArchitectureCreator:
    def test_create_x86(self):
        arch = ArchitectureCreator("x86").get()
        assert isinstance(arch, Arch_x86)

    def test_create_x86_case_insensitive(self):
        for name in ["X86", "x86", "X86"]:
            arch = ArchitectureCreator(name).get()
            assert isinstance(arch, Arch_x86)

    def test_unsupported_arch_raises(self):
        with pytest.raises(ValueError, match="Unsupported architecture"):
            ArchitectureCreator("arm").get()


# ============================================================================
# 3b. Arch_x86
# ============================================================================

class TestArch_x86Registers:
    def setup_method(self):
        self.arch = Arch_x86()

    def test_is_register_valid(self):
        assert self.arch.is_register("RAX") is True
        assert self.arch.is_register("eax") is True
        assert self.arch.is_register("XMM0") is True

    def test_is_register_invalid(self):
        assert self.arch.is_register("INVALID_REG") is False

    def test_is_general_purpose_register(self):
        assert self.arch.is_general_purpose_register("RAX") is True
        assert self.arch.is_general_purpose_register("XMM0") is False

    def test_is_stack_register(self):
        assert self.arch.is_stack_register("RSP") is True
        assert self.arch.is_stack_register("RBP") is True
        assert self.arch.is_stack_register("RAX") is False

    def test_is_xmm_register(self):
        assert self.arch.is_xmm_register("XMM0") is True
        assert self.arch.is_xmm_register("RAX") is False


class TestArch_x86OpcodeCategories:
    def setup_method(self):
        self.arch = Arch_x86()

    def test_opcode_categories_populated(self):
        assert len(self.arch.opcode_categories) > 0

    def test_opcode_mov_category(self):
        assert self.arch.opcode_categories["MOV"] == "DATA_MOVEMENT"

    def test_opcode_call_category(self):
        assert self.arch.opcode_categories["CALL"] == "CONTROL_FLOW"

    def test_opcode_add_category(self):
        assert self.arch.opcode_categories["ADD"] == "ARITHMETIC"


class TestArch_x86ControlFlow:
    def setup_method(self):
        self.arch = Arch_x86()

    def test_is_control_flow_instruction_by_mnemonic(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("JMP") is True
        assert self.arch.is_control_flow_instruction_by_mnemonic("MOV") is False

    def test_is_control_flow_instruction_call(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("CALL") is True

    def test_is_control_flow_instruction_ret(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("RET") is True

    def test_is_control_flow_instruction_loop(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("LOOP") is True

    def test_is_control_flow_instruction_empty(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("") is False
        assert self.arch.is_control_flow_instruction_by_mnemonic(None) is False