Ignazio Pedone

11 papers B 1C 1Misc 1Journal 5Unranked 3
YearRankTypeTitle / Venue / Authors
2024 J jnl
Future Gener. Comput. Syst.
Marco de Benedictis, Ludovic Jacquin, Ignazio Pedone, Andrea S. Atzeni, Antonio Lioy
2022 C conf
ISCC
Antonio Lioy, Ignazio Pedone, Silvia Sisinni
2022 B conf
NetSoft
Cataldo Basile, Daniele Canavese, Leonardo Regano, Ignazio Pedone, Antonio Lioy
2022 J jnl
Sensors
Silvia Sisinni, Davide Margaria, Ignazio Pedone, Antonio Lioy, Andrea Vesco
2022 conf
MeditCom
Carolina Fernández, Davide Sanvito, Orestis Kompougias, Valentino Safran, Maxime Compastié, Ignazio Pedone, Antonio López Martínez, Manuel Gil Pérez, Akis Kourtis, George Xylouris, Izidor Mlakar, Stylianos Tsarsitalidis, Dimitrios Klonidis, Daniele Canavese, Vangelis Logothetis, Diego R. López, Antonio Pastor, Antonio Lioy, Ludovic Jacquin, Supreshna Gurung, Roberto Bifulco, Athanasios Priovolos, Ilias Balampanis, Theodoros Rokkas, Nikolaos Papadakis, Dimitris Paraschos, Primoz Jeran, George Athanasiou, Dimitris Papadopoulos
2022 conf
C&ESAR
Maxime Compastié, Silvia Sisinni, Supreshna Gurung, Carolina Fernández, Ludovic Jacquin, Izidor Mlakar, Valentino Safran, Antonio Lioy, Ignazio Pedone
2022 J jnl
Future Internet
Ignazio Pedone, Antonio Lioy
2022 Misc conf
QCE
Pietro Chiavassa, Andrea Marchesin, Ignazio Pedone, Maurizio Ferrari Dacrema, Paolo Cremonesi
2021 conf
MeditCom
Evangelos Mantas, Dimitris Papadopoulos, Carolina Fernández, Nil Ortiz, Maxime Compastié, Antonio López Martínez, Manuel Gil Pérez, Akis Kourtis, George Xylouris, Izidor Mlakar, Stylianos Tsarsitalidis, Dimitrios Klonidis, Ignazio Pedone, Daniele Canavese, Gregorio Martínez Pérez, Davide Sanvito, Vangelis Logothetis, Diego R. López, Antonio Pastor, Antonio Lioy, Ludovic Jacquin, Roberto Bifulco, Angeliki Kapodistria, Athanasios Priovolos, Georgios Gardikis, Ioannis Neokosmidis, Theodoros Rokkas, Nikolaos Papadakis, Dimitris Paraschos, Primoz Jeran, Antonis Litke, George Athanasiou
2021 J jnl
IEEE Access
Ignazio Pedone, Andrea S. Atzeni, Daniele Canavese, Antonio Lioy
2019 J jnl
Secur. Commun. Networks
Ignazio Pedone, Antonio Lioy, Fulvio Valenza
tests/unit/test_decompile_function_type.py
← Index tests/unit/test_decompile_function_type.py python
"""Unit tests for bninja/function_type.py."""
import sys
import pytest
from unittest.mock import MagicMock

# Install binaryninja stubs before importing
from tests.unit.conftest_binja_stubs import install_binja_stubs, SymbolType
install_binja_stubs()

from redb.extractors.decompiler.bninja.function_type import (
    FunctionType,
    FunctionTypeAnalysis,
)


# ============================================================================
# 4a. FunctionType / FunctionTypeAnalysis
# ============================================================================


class TestFunctionTypeEnum:
    def test_function_type_enum_values(self):
        assert FunctionType.USER.value == "USER"
        assert FunctionType.LIBRARY.value == "LIBRARY"
        assert FunctionType.EXTERNAL.value == "EXTERNAL"
        assert FunctionType.THUNK.value == "THUNK"
        assert FunctionType.UNKNOWN.value == "UNKNOWN"


class TestFunctionTypeAnalysis:
    def _make_function(self, symbol_type=None, is_thunk=False, raise_on_symbol=False):
        func = MagicMock()
        func.is_thunk = is_thunk
        if raise_on_symbol:
            type(func).symbol = property(lambda self: (_ for _ in ()).throw(Exception("no symbol")))
        else:
            func.symbol.type = symbol_type if symbol_type is not None else SymbolType.FunctionSymbol
        return func

    def test_user_function_type(self):
        func = self._make_function(symbol_type=SymbolType.FunctionSymbol)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.USER

    def test_external_function_type(self):
        func = self._make_function(symbol_type=SymbolType.ImportedFunctionSymbol)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.EXTERNAL

    def test_library_function_type(self):
        func = self._make_function(symbol_type=SymbolType.LibraryFunctionSymbol)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.LIBRARY

    def test_thunk_function_type(self):
        # Thunk overrides the symbol type
        func = self._make_function(
            symbol_type=SymbolType.FunctionSymbol, is_thunk=True
        )
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.THUNK

    def test_exception_returns_unknown(self):
        func = self._make_function(raise_on_symbol=True)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.UNKNOWN