Jan I. H. Askne

26 papers C 5Journal 20Unranked 1
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Jan I. H. Askne
2021 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Jan I. H. Askne, Lars M. H. Ulander
2019 J jnl
Remote. Sens.
Jan I. H. Askne, Henrik J. Persson, Lars M. H. Ulander
2018 J jnl
Remote. Sens.
Jan I. H. Askne, Henrik J. Persson, Lars M. H. Ulander
2017 J jnl
IEEE Geosci. Remote. Sens. Lett.
Maciej J. Soja, Jan I. H. Askne, Lars M. H. Ulander
2015 J jnl
IEEE Geosci. Remote. Sens. Lett.
Jan I. H. Askne, Maurizio Santoro
2013 J jnl
Remote. Sens.
Jan I. H. Askne, Johan E. S. Fransson, Maurizio Santoro, Maciej J. Soja, Lars M. H. Ulander
2010 J jnl
IEEE Trans. Geosci. Remote. Sens.
Maurizio Santoro, Urs Wegmüller, Jan I. H. Askne
2009 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jan I. H. Askne, Maurizio Santoro
2008 conf
IGARSS (5)
Maurizio Santoro, Jan I. H. Askne, Christian Beer, Oliver Cartus, Christiane Schmullius, Urs Wegmüller, Andreas Wiesmann
2007 J jnl
IEEE Trans. Geosci. Remote. Sens.
Maurizio Santoro, Jan I. H. Askne, Urs Wegmüller, Charles Werner
2007 J jnl
IEEE Geosci. Remote. Sens. Lett.
Jan I. H. Askne, Maurizio Santoro
2006 C conf
IGARSS
Maurizio Santoro, Jan I. H. Askne
2006 C conf
IGARSS
Maurizio Santoro, Urs Wegmüller, Charles Werner, Jan I. H. Askne
2006 C conf
IGARSS
Leif E. B. Eriksson, Jan I. H. Askne, Maurizio Santoro, Andreas Wiesmann
2005 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jan I. H. Askne, Maurizio Santoro
2005 C conf
IGARSS
Leif E. B. Eriksson, Jan I. H. Askne, Maurizio Santoro, Christiane Schmullius, Andreas Wiesmann
2005 J jnl
IEEE Trans. Geosci. Remote. Sens.
Maurizio Santoro, Jan I. H. Askne, Patrik B. G. Dammert
2004 C conf
IGARSS
Maurizio Santoro, Christiane Schmullius, Jan I. H. Askne, Leif E. B. Eriksson
2003 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jan I. H. Askne, Maurizio Santoro, Gary Smith-Jonforsen, Johan E. S. Fransson
2000 J jnl
IEEE Trans. Geosci. Remote. Sens.
Hans Israelsson, Lars M. H. Ulander, Torleif Martin, Jan I. H. Askne
2000 J jnl
IEEE Trans. Geosci. Remote. Sens.
Tazio Strozzi, Patrik B. G. Dammert, Urs Wegmüller, Jean-Michel Martinez, Jan I. H. Askne, André Beaudoin, Martti Hallikainen
1999 J jnl
IEEE Trans. Geosci. Remote. Sens.
Patrik B. G. Dammert, Jan I. H. Askne, Sharon Kühlmann
1997 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jan I. H. Askne, Patrik B. G. Dammert, Lars M. H. Ulander, Gary Smith
1997 J jnl
IEEE Trans. Geosci. Remote. Sens.
Hans Israelsson, Lars M. H. Ulander, Jan I. H. Askne, Johan E. S. Fransson, Per-Olov Frölind, Anders Gustavsson, Hans Hellsten
1995 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jan O. Hagberg, Lars M. H. Ulander, Jan I. H. Askne
redb/extractors/decompiler/bninja/analysis/strings.py
← Index redb/extractors/decompiler/bninja/analysis/strings.py python
from collections import Counter
import math

class StringAnalysis:
    def __init__(self, bv, functions):
        self.bv = bv
        self.functions = functions

    def entropy(self, s: str) -> float:
        """Compute Shannon entropy of a string."""
        if not s:
            return 0.0
        freq = Counter(s)
        length = len(s)
        return -sum((count / length) * math.log2(count / length) for count in freq.values())

    def analyze(self):
        """
        Extract unique strings from the binary.

        Deduplicates by (string, encoding) within the same binary, keeping the
        first occurrence (lowest offset). Cross-binary deduplication and
        aggregation is handled by ClickHouse materialized views.
        """
        strings = {}

        # Sort strings by their starting address
        sorted_entries = sorted(self.bv.strings, key=lambda e: e.start)

        for entry in sorted_entries:
            # Key is the string and its encoding
            key = (entry.value, entry.type.name)

            # Skip if this string (value + encoding) was already added.
            # Because entries are sorted by address, the first one is always kept.
            if key in strings:
                continue

            # Store only the first occurrence with schema-matching field names
            # entry.length is the raw byte length, len(entry.value) is decoded string length
            string_entry = {
                "string": entry.value,
                "string_raw": entry.raw,
                "string_encoding": entry.type.name,
                "string_offset": entry.start,
                "string_length": len(entry.value),
                "string_raw_length": entry.length,
                "string_entropy": self.entropy(entry.value),
            }

            strings[key] = string_entry

        # Return as list for export compatibility
        return list(strings.values())