Olli Vainio

57 papers A* 1A 1B 2C 6Misc 1Journal 31Unranked 12
YearRankTypeTitle / Venue / Authors
2013 ed.
ISSoC
Jari Nurmi, Peeter Ellervee, Leandro Soares Indrusiak, Olli Vainio, Sarang Thombre, Jussi Raasakka
2013 ch.
Handbook of Signal Processing Systems
Olli Vainio
2011 J jnl
Microprocess. Microsystems
Raija Lehto, Tarja Taurén, Olli Vainio
2010 ch.
Handbook of Signal Processing Systems
Olli Vainio
2010 J jnl
Circuits Syst. Signal Process.
Raija Lehto, Tapio Saramäki, Olli Vainio
2008 C conf
ISCAS
Raija Lehto, Tapio Saramäki, Olli Vainio
2007 conf
SoC
Raimo Mäkelä, Olli Vainio
2007 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Raija Lehto, Tapio Saramäki, Olli Vainio
2007 C conf
ISCAS
Raija Lehto, Tapio Saramäki, Olli Vainio
2006 C conf
DDECS
Harri Lampinen, Pauli Perälä, Olli Vainio
2006 C conf
ISCAS
Raija Lehto, Tapio Saramäki, Olli Vainio
2005 J jnl
IEEE Trans. Instrum. Meas.
Seppo J. Ovaska, Tamal Bose, Olli Vainio
2005 conf
ISCAS (1)
Harri Lampinen, Pauli Perälä, Olli Vainio
2005 conf
ISCAS (3)
Raija Lehto, Tapio Saramäki, Olli Vainio
2004 J jnl
IEEE Trans. Ind. Electron.
Seppo J. Ovaska, Olli Vainio
2003 J jnl
IEEE Trans. Ind. Electron.
Olli Vainio, Seppo J. Ovaska, Matti Pöllä
2003 conf
ISCAS (5)
Harri Lampinen, Pauli Perälä, Olli Vainio
2003 B conf
SMC
Seppo J. Ovaska, Olli Vainio
2003 B conf
SMC
Seppo J. Ovaska, Tamal Bose, Olli Vainio
2002 conf
ISCAS (5)
Harri Lampinen, Olli Vainio
2002 conf
EUSIPCO
Olli Vainio
2002 conf
EUSIPCO
Olli Vainio
2002 J jnl
IEEE Trans. Ind. Electron.
Olli Vainio, Seppo J. Ovaska
2001 J jnl
IEEE Trans. Instrum. Meas.
Harri Lampinen, Olli Vainio
2001 conf
ISCAS (4)
Harri Lampinen, Olli Vainio
2001 J jnl
IEEE Signal Process. Lett.
Olli Vainio
2001 Misc conf
ICASSP
Olli Vainio, Seppo J. Ovaska
2001 J jnl
Signal Process.
Olli Vainio
2001 conf
ISCAS (3)
Ming Hu, David Z. Gevorkian, Olli Vainio
2000 conf
EUSIPCO
Jarno M. A. Tanskanen, Seppo J. Ovaska, Olli Vainio
2000 A conf
IEEE International Conference on Multimedia and Expo (III)
M. Hu, Olli Vainio, David Z. Gevorkian
2000 C conf
ISCAS
Harri Lampinen, Olli Vainio
2000 conf
EUSIPCO
Ilkka Saastamoinen, Tapio Saramäki, Olli Vainio
1999 J jnl
IEEE Trans. Ind. Electron.
Olli Vainio
1999 J jnl
IEEE Trans. Instrum. Meas.
Sami Väliviita, Olli Vainio
1999 J jnl
IEEE Trans. Instrum. Meas.
Olli Vainio
1999 J jnl
IEEE Trans. Ind. Electron.
Sami Väliviita, Seppo J. Ovaska, Olli Vainio
1999 J jnl
IEEE Trans. Ind. Electron.
Olli Vainio, Sami Väliviita
1999 conf
ISCAS (3)
M. Hu, Olli Vainio, Jaakko Astola, Karen O. Egiazarian, David Z. Gevorkian
1998 A* conf
ICRA
Olli Vainio
1997 J jnl
IEEE Trans. Ind. Electron.
Olli Vainio, Seppo J. Ovaska
1997 J jnl
IEEE Trans. Ind. Electron.
Olli Vainio, Seppo J. Ovaska
1997 J jnl
Signal Process.
Jaakko Astola, David Akopian, Olli Vainio, Sos S. Agaian
1997 J jnl
IEEE Trans. Control. Syst. Technol.
Seppo J. Ovaska, Olli Vainio
1995 C conf
ISCAS
M. Rinne, Tiina Jarske, Hannu Tenhunen, Olli Vainio, Yrjö Neuvo
1995 J jnl
IEEE Trans. Ind. Electron.
Olli Vainio, Seppo J. Ovaska
1995 J jnl
IEEE Trans. Signal Process.
David Z. Gevorkian, Karen O. Egiazarian, Sos S. Agaian, Jaakko Astola, Olli Vainio
1995 J jnl
IEEE Trans. Signal Process.
David Akopian, Olli Vainio, Sos S. Agaian, Jaakko Astola
1994 J jnl
Signal Process.
Olli Vainio
1994 J jnl
IEEE Trans. Ind. Electron.
Olli Vainio, Seppo J. Ovaska
1993 J jnl
J. VLSI Signal Process.
Jouni Isoaho, Jari Pasanen, Olli Vainio, Hannu Tenhunen
1993 J jnl
Signal Process.
Timo I. Laakso, Seppo J. Ovaska, Olli Vainio
1992 J jnl
IEEE J. Solid State Circuits
Olli Vainio, Mani Sundaram, Stephen I. Long, Yrjö Neuvo
1992 J jnl
IEEE Trans. Ind. Electron.
Olli Vainio, Seppo J. Ovaska, Jari Pasanen
1992 J jnl
Microprocess. Microsystems
Olli Vainio, Seppo J. Ovaska
1989 J jnl
IEEE Trans. Acoust. Speech Signal Process.
Olli Vainio, Yrjö Neuvo, Steven E. Butner
1987 J jnl
Integr.
Olli Vainio, Pekka Heinonen, Yrjö Neuvo
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}"