Valerio Gower

17 papers B 1C 2Journal 3Unranked 11
YearRankTypeTitle / Venue / Authors
2025 J jnl
Int. J. Soc. Robotics
Carmela Calabrese, Valerio Gower, Mattia Randazzo, Marco Randazzo, Francesco Brand, Fabiola Giovanna Mestanza Mattos, Federico Spinelli, Mattia Fussi, Ettore Landini, Stefano Bernagozzi, Lorenzo Natale
2022 J jnl
Sensors
Tiziana Lencioni, Mario Meloni, Thomas Bowman, Alberto Marzegan, Antonio Caronni, Ilaria Carpinella, Anna Castagna, Valerio Gower, Maurizio Ferrarin, Elisa Pelosin
2022 J jnl
Frontiers Robotics AI
Valentina Vasco, Alexandre G. P. Antunes, Vadim Tikhanoff, Ugo Pattacini, Lorenzo Natale, Valerio Gower, Marco Maggiali
2022 conf
ICCHP-AAATE (2)
Claudia Salatino, Valerio Gower, Lia Malisano, Chiara Folini, Maurizio Saruggia, Rosa Maria Converti, Francesco Zava, Marina Ramella
2019 B conf
ICSR
Valentina Vasco, Cesco Willemse, Pauline Chevalier, Davide De Tommaso, Valerio Gower, Furio Gramatica, Vadim Tikhanoff, Ugo Pattacini, Giorgio Metta, Agnieszka Wykowska
2017 conf
AAATE Conf.
Claudia Salatino, Lucia Pigini, Marlies Maria Elisabeth Van Kol, Valerio Gower, Renzo Andrich, Giulia Munaro, Roberto Rosso, Angelo P. Castellani, Elisabetta Farina
2016 conf
ICCHP (1)
Claudia Salatino, Valerio Gower, Meftah Ghrissi, Adriana Tapus, Katarzyna Wieczorowska-Tobis, Aleksandra Suwalska, Paolo Barattini, Roberto Rosso, Giulia Munaro, Nicola Bellotto, Herjan van den Heuvel
2015 conf
AAATE Conf.
Valerio Gower, Claudia Salatino, Lucia Pigini, Antonio Caracciolo
2015 conf
AAATE Conf.
Valerio Gower, Renzo Andrich
2014 conf
ICCHP (2)
Nikolaos Kaklanis, Konstantinos Votis, Konstantinos M. Giannoutakis, Dimitrios Tzovaras, Valerio Gower, Renzo Andrich
2014 conf
HCI (7)
Valerio Gower, Renzo Andrich, Andrea Agnoletto
2014 conf
HCI (7)
Gregg C. Vanderheiden, Valerio Gower, Amrish O. Chourasia
2012 C conf
EAMT
Gregor Thurmair, Andrea Agnoletto, Valerio Gower, Roberts Rozis
2012 conf
ICCHP (1)
Renzo Andrich, Valerio Gower, Sabrina Vincenti
2012 conf
ICCHP (1)
Valerio Gower, Renzo Andrich, Andrea Agnoletto, Petra Winkelmann, Thomas Lyhne, Roberts Rozis, Gregor Thurmair
2011 conf
PervasiveHealth
Paolo Meriggi, Paolo Castiglioni, Francesco Rizzo, Valerio Gower, Renzo Andrich, Marco Rabuffetti, Maurizio Ferrarin, Marco Di Rienzo
2006 C conf
ICCHP
Renzo Andrich, Valerio Gower, Antonio Caracciolo, Giovanni Del Zanna, Marco Di Rienzo
tests/unit/test_decompile_strings.py
← Index tests/unit/test_decompile_strings.py python
"""Unit tests for bninja/analysis/strings.py — StringAnalysis."""
import pytest
import math
from unittest.mock import MagicMock


# StringAnalysis has no binaryninja imports, just collections and math
from redb.extractors.decompiler.bninja.analysis.strings import StringAnalysis


# ============================================================================
# Helper mocks
# ============================================================================

class MockStringEntry:
    """Mock for a Binary Ninja string reference."""
    def __init__(self, value, raw=None, start=0, length=0, type_name="Utf8String"):
        self.value = value
        self.raw = raw if raw is not None else (value.encode("utf-8") if isinstance(value, str) else value)
        self.start = start
        self.length = length if length else len(self.raw)
        self.type = MagicMock()
        self.type.name = type_name


class MockBinaryView:
    """Mock binary view with a strings list."""
    def __init__(self, strings=None):
        self.strings = strings or []


# ============================================================================
# 6a. StringAnalysis
# ============================================================================


class TestStringAnalysisEntropy:
    def setup_method(self):
        self.sa = StringAnalysis(bv=MockBinaryView(), functions=[])

    def test_entropy_empty_string(self):
        assert self.sa.entropy("") == 0.0

    def test_entropy_single_char(self):
        assert self.sa.entropy("aaaa") == 0.0

    def test_entropy_uniform_distribution(self):
        # "abcd" -> 4 unique chars, each p=1/4, entropy = log2(4) = 2.0
        result = self.sa.entropy("abcd")
        assert result == pytest.approx(2.0)

    def test_entropy_binary_string(self):
        # "ab" -> 2 unique chars, each p=1/2, entropy = log2(2) = 1.0
        result = self.sa.entropy("ab")
        assert result == pytest.approx(1.0)


class TestStringAnalysisAnalyze:
    def test_analyze_deduplication(self):
        """Duplicate (string, encoding) pairs -> only first kept."""
        entries = [
            MockStringEntry("hello", start=100, type_name="Utf8String"),
            MockStringEntry("hello", start=200, type_name="Utf8String"),
        ]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        assert result[0]["string_offset"] == 100

    def test_analyze_sorted_by_address(self):
        """First occurrence (lowest offset) is the one kept."""
        entries = [
            MockStringEntry("world", start=500, type_name="Utf8String"),
            MockStringEntry("world", start=100, type_name="Utf8String"),
        ]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        # The analyze() sorts by start, so 100 comes first
        assert result[0]["string_offset"] == 100

    def test_analyze_empty_bv(self):
        bv = MockBinaryView(strings=[])
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert result == []

    def test_analyze_output_schema(self):
        entries = [MockStringEntry("test_string", start=0, type_name="Utf8String")]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        r = result[0]
        required_keys = [
            "string",
            "string_raw",
            "string_encoding",
            "string_offset",
            "string_length",
            "string_raw_length",
            "string_entropy",
        ]
        for key in required_keys:
            assert key in r, f"Missing key: {key}"