Vasileios Sitokonstantinou

34 papers A* 1C 3Journal 24Unranked 5
YearRankTypeTitle / Venue / Authors
2025 J jnl
Comput. Electron. Agric.
Iason Tsardanidis, Alkiviadis Koukos, Vasileios Sitokonstantinou, Thanassis Drivas, Charalampos Kontoes
2025 J jnl
CoRR
Nathan Mankovich, Kai-Hendrik Cohrs, Homer Durand, Vasileios Sitokonstantinou, Tristan Williams, Gustau Camps-Valls
2025 J jnl
Mach. Learn. Sci. Technol.
Kai-Hendrik Cohrs, Emiliano Diaz, Vasileios Sitokonstantinou, Gherardo Varando, Gustau Camps-Valls
2025 J jnl
CoRR
Ilias Tsoumas, Dimitrios Bormpoudakis, Vasileios Sitokonstantinou, Athanasios Askitopoulos, Andreas Kalogeras, Charalampos Kontoes, Ioannis Athanasiadis
2025 J jnl
CoRR
Kai-Hendrik Cohrs, Zuzanna Osika, Maria Gonzalez-Calabuig, Vishal Nedungadi, Ruben Cartuyvels, Steffen Knoblauch, Joppe Massant, Shruti Nath, Patrick Ebel, Vasileios Sitokonstantinou
2024 C conf
IGARSS
Jordi Cerdà-Bautista, José María Tárraga, Vasileios Sitokonstantinou, Gustau Camps-Valls
2024 J jnl
CoRR
Vasileios Sitokonstantinou, Emiliano Díaz Salas Porras, Jordi Cerdà-Bautista, Maria Piles, Ioannis Athanasiadis, Hannah Kerner, Giulia Martini, Lily-belle Sweet, Ilias Tsoumas, Jakob Zscheischler, Gustau Camps-Valls
2024 J jnl
CoRR
Iason Tsardanidis, Alkiviadis Koukos, Vasileios Sitokonstantinou, Thanassis Drivas, Charalampos Kontoes
2024 J jnl
CoRR
Kai-Hendrik Cohrs, Gherardo Varando, Emiliano Diaz, Vasileios Sitokonstantinou, Gustau Camps-Valls
2024 C conf
IGARSS
Alkiviadis Koukos, Hyun-Woo Jo, Vasileios Sitokonstantinou, Ilias Tsoumas, Charalampos Kontoes, Woo-Kyun Lee
2023 J jnl
CoRR
Ilias Tsoumas, Vasileios Sitokonstantinou, Georgios Giannarakis, Evagelia Lampiri, Christos Athanassiou, Gustau Camps-Valls, Charalampos Kontoes, Ioannis Athanasiadis
2023 A* conf
AAAI
Ilias Tsoumas, Georgios Giannarakis, Vasileios Sitokonstantinou, Alkiviadis Koukos, Dimitra Loka, Nikolaos S. Bartsotas, Charalampos Kontoes, Ioannis Athanasiadis
2023 J jnl
CoRR
Jordi Cerdà-Bautista, José María Tárraga, Vasileios Sitokonstantinou, Gustau Camps-Valls
2022 conf
IVMSP
Thanassis Drivas, Vasileios Sitokonstantinou, Iason Tsardanidis, Alkiviadis Koukos, Charalampos Kontoes, Vassilia Karathanassi
2022 J jnl
CoRR
Thanassis Drivas, Vasileios Sitokonstantinou, Iason Tsardanidis, Alkiviadis Koukos, Charalampos Kontoes, Vassilia Karathanassi
2022 J jnl
Remote. Sens.
Maria Ioannidou, Alkiviadis Koukos, Vasileios Sitokonstantinou, Ioannis Papoutsis, Charalampos Kontoes
2022 J jnl
CoRR
Vasileios Sitokonstantinou
2022
Vasileios Sitokonstantinou
2022 conf
MMM (2)
Vasileios Sitokonstantinou, Alkiviadis Koukos, Thanassis Drivas, Charalampos Kontoes, Vassilia Karathanassi
2022 J jnl
CoRR
Ilias Tsoumas, Georgios Giannarakis, Vasileios Sitokonstantinou, Alkiviadis Koukos, Dimitra Loka, Nikolaos S. Bartsotas, Charalampos Kontoes, Ioannis Athanasiadis
2022 J jnl
CoRR
Ilias Tsoumas, Georgios Giannarakis, Vasileios Sitokonstantinou, Alkiviadis Koukos, Dimitra Loka, Nikolaos S. Bartsotas, Charalampos Kontoes, Ioannis Athanasiadis
2022 J jnl
CoRR
Vasileios Sitokonstantinou, Alkiviadis Koukos, Ilias Tsoumas, Nikolaos S. Bartsotas, Charalampos Kontoes, Vassilia Karathanassi
2022 J jnl
CoRR
Georgios Giannarakis, Vasileios Sitokonstantinou, Roxanne Suzette Lorilla, Charalampos Kontoes
2022 conf
IVMSP
Ornela Nanushi, Vasileios Sitokonstantinou, Ilias Tsoumas, Charalampos Kontoes
2022 J jnl
CoRR
Ornela Nanushi, Vasileios Sitokonstantinou, Ilias Tsoumas, Charalampos Kontoes
2022 J jnl
CoRR
Hyun-Woo Jo, Alkiviadis Koukos, Vasileios Sitokonstantinou, Woo-Kyun Lee, Charalampos Kontoes
2022 conf
IVMSP
George Choumos, Alkiviadis Koukos, Vasileios Sitokonstantinou, Charalampos Kontoes
2022 J jnl
CoRR
George Choumos, Alkiviadis Koukos, Vasileios Sitokonstantinou, Charalampos Kontoes
2022 conf
CVPR Workshops
Georgios Giannarakis, Vasileios Sitokonstantinou, Roxanne Suzette Lorilla, Charalampos Kontoes
2022 J jnl
CoRR
Georgios Giannarakis, Vasileios Sitokonstantinou, Roxanne Suzette Lorilla, Charalampos Kontoes
2021 J jnl
Remote. Sens.
Vasileios Sitokonstantinou, Alkiviadis Koukos, Thanassis Drivas, Charalampos Kontoes, Ioannis Papoutsis, Vassilia Karathanassi
2021 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Maria Rousi, Vasileios Sitokonstantinou, Georgios Meditskos, Ioannis Papoutsis, Ilias Gialampoukidis, Alkiviadis Koukos, Vassilia Karathanassi, Thanassis Drivas, Stefanos Vrochidis, Charalampos Kontoes, Ioannis Kompatsiaris
2021 C conf
IGARSS
Vasileios Sitokonstantinou, Alkiviadis Koukos, Charalampos Kontoes, Nikolaos S. Bartsotas, Vassilia Karathanassi
2018 J jnl
Remote. Sens.
Vasileios Sitokonstantinou, Ioannis Papoutsis, Charalampos Kontoes, Alberto Lafarga Arnal, Ana Pilar Armesto Andrés, José Angel Garraza Zurbano
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}"