Valbona Barolli

38 papers B 3C 1Misc 5Journal 11Unranked 17
YearRankTypeTitle / Venue / Authors
2013 conf
NBiS
Evjola Spaho, Shinji Sakamoto, Leonard Barolli, Fatos Xhafa, Valbona Barolli, Jiro Iwashige
2013 Misc conf
CISIS
Kouhei Umezaki, Evjola Spaho, Leonard Barolli, Fatos Xhafa, Valbona Barolli, Jiro Iwashige
2011 J jnl
Int. J. Bus. Intell. Data Min.
Heihachiro Fukuda, Valbona Barolli, Leonard Barolli, Makoto Takizawa
2011 J jnl
Int. J. Bus. Intell. Data Min.
Soichi Sawamura, Ailixier Aikebaier, Valbona Barolli, Makoto Takizawa
2010 conf
NBiS
Soichi Sawamura, Ailixier Aikebaier, Tomoya Enokido, Valbona Barolli, Makoto Takizawa
2010 conf
AINA Workshops
Soichi Sawamura, Ailixier Aikebaier, Tomoya Enokido, Valbona Barolli, Makoto Takizawa
2010 Misc conf
CISIS
Soichi Sawamura, Ailixier Aikebaier, Tomoya Enokido, Valbona Barolli, Makoto Takizawa
2010 conf
BWCCA
Soichi Sawamura, Leonard Barolli, Ailixier Aikebaier, Valbona Barolli, Makoto Takizawa
2009 J jnl
Comput. Stand. Interfaces
Tomoya Enokido, Valbona Barolli, Makoto Takizawa
2009 B conf
AINA
Ailixier Aikebaier, Valbona Barolli, Tomoya Enokido, Makoto Takizawa
2009 conf
ICDCS Workshops
Ailixier Aikebaier, Valbona Barolli, Tomoya Enokido, Makoto Takizawa
2008 conf
ICPP Workshops
Ailixier Aikebaier, Valbona Barolli, Tomoya Enokido, Makoto Takizawa
2008 Misc conf
CISIS
Heihachiro Fukuda, Valbona Barolli, Leonard Barolli, Makoto Takizawa
2008 B conf
AINA
Valbona Barolli, Heihachiro Fukuda, Leonard Barolli, Makoto Takizawa
2008 J jnl
J. Interconnect. Networks
Ailixier Aikebaier, Valbona Barolli, Tomoya Enokido, Makoto Takizawa
2008 J jnl
Int. J. High Perform. Comput. Netw.
Valbona Barolli, Heihachiro Fukuda, Leonard Barolli, Makoto Takizawa
2008
Valbona Barolli
2008 J jnl
Inf. Syst. E Bus. Manag.
Valbona Barolli, Heihachiro Fukuda, Leonard Barolli, Makoto Takizawa
2008 Misc conf
CISIS
Masakazu Maruoka, Alireza Goudarzi Nemati, Valbona Barolli, Tomoya Enokido, Makoto Takizawa
2008 conf
AINA Workshops
Masakazu Maruoka, Alireza Goudarzi Nemati, Valbona Barolli, Tomoya Enokido, Makoto Takizawa
2007 J jnl
Int. J. Bus. Data Commun. Netw.
Heihachiro Fukuda, Valbona Barolli, Leonard Barolli, Makoto Takizawa
2007 J jnl
Serv. Oriented Comput. Appl.
Valbona Barolli, Heihachiro Fukuda, Leonard Barolli, Makoto Takizawa
2007 conf
ICPP Workshops
Valbona Barolli, Heihachiro Fukuda, Leonard Barolli, Makoto Takizawa
2007 Misc conf
CISIS
Yoshio Nakajima, Kenichi Watanabe, Valbona Barolli, Tomoya Enokido, Makoto Takizawa
2007 J jnl
Simul. Model. Pract. Theory
Tomoya Enokido, Youhei Tanaka, Valbona Barolli, Makoto Takizawa
2007 conf
NBiS
Valbona Barolli, Heihachiro Fukuda, Leonard Barolli, Makoto Takizawa
2007 conf
NBiS
Tomoya Enokido, Valbona Barolli, Makoto Takizawa
2007 B conf
AINA
Tomoya Enokido, Valbona Barolli, Makoto Takizawa
2007 J jnl
Int. J. Bus. Intell. Data Min.
Valbona Barolli, Heihachiro Fukuda, Leonard Barolli, Makoto Takizawa
2006 conf
ICEBE
Valbona Barolli, Heihachiro Fukuda, Leonard Barolli, Makoto Takizawa
2006 conf
DEXA Workshops
Valbona Barolli, Heihachiro Fukuda, Leonard Barolli, Makoto Takizawa
2006 J jnl
Int. J. Bus. Intell. Data Min.
Valbona Barolli, Heihachiro Fukuda, Leonard Barolli, Makoto Takizawa
2006 C conf
ISM
Tomoya Enokido, Youhei Tanaka, Valbona Barolli, Makoto Takizawa
2006 conf
AINA (1)
Valbona Barolli, Heihachiro Fukuda, Leonard Barolli, Makoto Takizawa
2005 conf
DEXA Workshops
Valbona Barolli, Heihachiro Fukuda
2005 conf
ICPADS (2)
Valbona Barolli, Heihachiro Fukuda
2005 conf
ICDCS Workshops
Mikio Amano, Daisuke Hironaka, Seio Oda, Valbona Barolli, Genci Capi, Masao Yokota
2005 conf
ICPADS (1)
Masao Yokota, Daisuke Hironaka, Valbona Barolli, Genci Capi
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}"