Jackeline Abad Torres

29 papers C 9Journal 9Unranked 11
YearRankTypeTitle / Venue / Authors
2025 J jnl
J. Intell. Robotic Syst.
Esteban Valencia, Francisco Toapanta, Gabriel Oña, Andrey Carrillo, Daniel Aláez, Erick S. Loyaga, William Chamorro, Patricio Cruz, Jackeline Abad Torres, Patrick Vandewalle
2024 J jnl
IEEE Access
Diego Maldonado, Edison Cruz, Jackeline Abad Torres, Patricio J. Cruz Davalos, Silvana del Pilar Gamboa Benitez
2023 J jnl
Robotics
Luis D. Ortega, Erick S. Loyaga, Patricio J. Cruz Davalos, Henry Lema, Jackeline Abad Torres, Esteban Valencia
2022 J jnl
Autom.
Jackeline Abad Torres, Sandip Roy
2019 J jnl
Autom.
Kasra Koorehdavoudi, Sandip Roy, Mengran Xue, Jackeline Abad Torres
2019 C conf
ACC
Kasra Koorehdavoudi, Sandip Roy, Mengran Xue, Jackeline Abad Torres
2019 C conf
IECON
Silvana Gamboa, Jackeline Abad Torres, Alberto Sánchez, Eduardo Orduña
2018 J jnl
Autom.
Jackeline Abad Torres, Sandip Roy
2018 conf
CDC
Kasra Koorehdavoudi, Sandip Roy, Jackeline Abad Torres, Mengran Xue
2017 conf
ICINCO (Selected Papers)
Renato Vizuete, Jackeline Abad Torres, Paulo Leica
2017 conf
CDC
Kasra Koorehdavoudi, Sandip Roy, Jackeline Abad Torres, Mengran Xue
2017 C conf
ACC
Dinuka Sahabandu, Rahul Dhal, Jackeline Abad Torres, Sandip Roy
2017 J jnl
IEEE Trans. Autom. Control.
Jackeline Abad Torres, Sandip Roy, Yan Wan
2017 conf
ICINCO (1)
Renato Vizuete, Jackeline Abad Torres, Paulo Leica
2016 conf
CDC
Kasra Koorehdavoudi, Mohammadreza Hatami, Sandip Roy, Vaithianathan Venkatasubramanian, Patrick Panciatici, Florent Xavier, Jackeline Abad Torres
2016 conf
CDC
Sandip Roy, Jackeline Abad Torres, Mengran Xue
2016 C conf
ACC
Jackeline Abad Torres, Sandip Roy, Sarah Rausch
2015 conf
CDC
Jackeline Abad Torres, Sandip Roy
2015 C conf
ACC
Jackeline Abad Torres, Rahul Dhal, Sandip Roy
2015 conf
CDC
Jackeline Abad Torres, Sandip Roy
2015 J jnl
Autom.
Jackeline Abad Torres, Sandip Roy
2015 C conf
ACC
Jackeline Abad Torres, Sandip Roy
2015 conf
ICCPS
Jackeline Abad Torres, Dinuka Sahabandu, Rahul Dhal, Sandip Roy
2015 C conf
ACC
Jackeline Abad Torres, Sandip Roy, Yan Wan
2014 J jnl
Int. J. Control
Jackeline Abad Torres, Sandip Roy
2014 C conf
ACC
Jackeline Abad Torres, Sandip Roy
2013 C conf
ACC
Jackeline Abad Torres, Sandip Roy
2013 conf
GlobalSIP
Rahul Dhal, Jackeline Abad Torres, Sandip Roy
2012 conf
CDC
Jackeline Abad Torres, Sandip Roy
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}"