Jack H. Winters

77 papers A* 1B 12Misc 2Journal 44Unranked 18
YearRankTypeTitle / Venue / Authors
2022 conf
MILCOM
Pialy Biswas, Ranjan K. Mallik, Jack H. Winters
2020 Misc conf
COMSNETS
Sandeep Joshi, Ranjan K. Mallik, Jack H. Winters
2013 J jnl
IEEE Trans. Commun.
Ranjan K. Mallik, Jack H. Winters
2011 conf
ICC
Ranjan K. Mallik, Jack H. Winters
2011 conf
WOCC
Alex Lackpour, Michael Luddy, Jack H. Winters
2011 J jnl
IEEE J. Sel. Areas Commun.
Jack H. Winters, Andrey Kobyakov, Michael Sauer
2010 J jnl
Wirel. Pers. Commun.
Xin Zhou, Jack H. Winters, Patrick C. F. Eggers, Persefoni Kyritsi
2010 J jnl
IEEE Trans. Commun.
Ranjan K. Mallik, Jack H. Winters
2009 conf
ICC
Ranjan K. Mallik, Jack H. Winters
2009 conf
ICC
Jack H. Winters, Andrey Kobyakov, Michael Sauer
2008 J jnl
IEEE Trans. Inf. Theory
Ranjan K. Mallik, Jack H. Winters
2007 B conf
GLOBECOM
Ranjan K. Mallik, Jack H. Winters
2007 J jnl
IEEE Trans. Veh. Technol.
Kin K. Leung, Martin V. Clark, Bruce McNair, Zoran Kostic, Leonard J. Cimini Jr., Jack H. Winters
2006 J jnl
IEEE Wirel. Commun.
Jack H. Winters
2005 J jnl
IEEE Signal Process. Mag.
Jack H. Winters
2004 J jnl
IEEE Trans. Wirel. Commun.
Marco Chiani, Moe Z. Win, Alberto Zanella, Jack H. Winters
2003 J jnl
IEEE Commun. Lett.
Andrea Conti, Moe Z. Win, Marco Chiani, Jack H. Winters
2003 J jnl
IEEE Trans. Commun.
Marco Chiani, Moe Z. Win, Alberto Zanella, Ranjan K. Mallik, Jack H. Winters
2003 J jnl
IEEE Trans. Commun.
Moe Z. Win, Norman C. Beaulieu, Lawrence A. Shepp, Benjamin F. Logan Jr., Jack H. Winters
2003 J jnl
IEEE Trans. Signal Process.
Andreas F. Molisch, Moe Z. Win, Jack H. Winters
2002 conf
ICC
Marco Chiani, Moe Z. Win, Alberto Zanella, Jack H. Winters
2002 B conf
GLOBECOM
Marco Chiani, Moe Z. Win, Alberto Zanella, Jack H. Winters
2002 J jnl
IEEE Trans. Commun.
Geoffrey Ye Li, Jack H. Winters, Nelson Sollenberger
2002 conf
ICC
Rick S. Blum, Jack H. Winters
2002 J jnl
IEEE Commun. Lett.
Rick S. Blum, Jack H. Winters
2002 J jnl
IEEE Commun. Lett.
Rick S. Blum, Jack H. Winters, Nelson Sollenberger
2002 conf
ICC
Kin K. Leung, Bruce McNair, Leonard J. Cimini Jr., Jack H. Winters
2002 J jnl
IEEE Trans. Commun.
Ranjan K. Mallik, Moe Z. Win, Jack H. Winters
2002 J jnl
IEEE Commun. Lett.
Andreas F. Molisch, Moe Z. Win, Jack H. Winters
2001 conf
ICC
Andreas F. Molisch, Moe Z. Win, Jack H. Winters
2001 B conf
GLOBECOM
Marco Chiani, Moe Z. Win, Alberto Zanella, Jack H. Winters
2001 J jnl
IEEE Trans. Commun.
Rick S. Blum, Geoffrey Ye Li, Jack H. Winters, Qing Yan
2001 J jnl
IEEE Trans. Commun.
Hanks H. Zeng, Geoffrey Ye Li, Jack H. Winters
2001 conf
VTC Fall
Kin K. Leung, Jack H. Winters, Leonard J. Cimini Jr.
2001 conf
VTC Fall
Carol C. Martin, Jack H. Winters, Nelson Sollenberger
2001 conf
VTC Fall
William Turin, Rittwik Jana, Carol C. Martin, Jack H. Winters
2001 conf
VTC Fall
Rick S. Blum, Jack H. Winters, Nelson Sollenberger
2001 conf
ICC
Ye (Geoffrey) Li, Jack H. Winters, Nelson Sollenberger
2001 J jnl
IEEE Trans. Commun.
Moe Z. Win, Jack H. Winters
2000 B conf
WCNC
Hanks H. Zeng, Ye (Geoffrey) Li, Jack H. Winters, Hamid R. Sadjadpour
2000 B conf
GLOBECOM
Moe Z. Win, Ranjan K. Mallik, George Chrisikos, Jack H. Winters
2000 J jnl
IEEE J. Sel. Areas Commun.
Sirikiat Lek Ariyavisitakul, Jack H. Winters, Nelson Sollenberger
2000 J jnl
IEEE Commun. Lett.
Moe Z. Win, George Chrisikos, Jack H. Winters
2000 B conf
GLOBECOM
Ranjan K. Mallik, Moe Z. Win, Jack H. Winters
1999 J jnl
IEEE Commun. Lett.
Jack H. Winters, Carol C. Martin, Tom Zhuang
1999 conf
ICC
Moe Z. Win, Jack H. Winters
1999 J jnl
IEEE Trans. Commun.
Moe Z. Win, Jack H. Winters
1999 B conf
WCNC
Moe Z. Win, Ranjan K. Mallik, George Chrisikos, Jack H. Winters
1999 B conf
WCNC
Moe Z. Win, Jack H. Winters
1999 conf
ICC
Sirikiat Lek Ariyavisitakul, Jack H. Winters, Inkyu Lee
1999 J jnl
IEEE Trans. Commun.
Sirikiat Lek Ariyavisitakul, Jack H. Winters, Inkyu Lee
1998 conf
ICC
Ye (Geoffrey) Li, Jack H. Winters, Nelson Sollenberger
1998 J jnl
IEEE J. Sel. Areas Commun.
Ye (Geoffrey) Li, K. J. Ray Liu, Jack H. Winters, Jørgen Bach Andersen
1998 J jnl
IEEE Wirel. Commun.
Jack H. Winters
1998 J jnl
IEEE Trans. Commun.
Jack H. Winters, Jack Salz
1997 B conf
PIMRC
Ye (Geoffrey) Li, Jack H. Winters, Nelson Sollenberger
1995 B conf
PIMRC
Michael J. Gans, Reinaldo A. Valenzuela, Jack H. Winters, Manny Carloni
1994 B conf
PIMRC
Zygmunt J. Haas, Jack H. Winters, David S. Johnson
1994 J jnl
IEEE Trans. Commun.
Jack H. Winters, Jack Salz, Richard D. Gitlin
1994 J jnl
Int. J. Wirel. Inf. Networks
N. Seshadri, Jack H. Winters
1994 B conf
VTC
Jack H. Winters, Jack Salz
1993 J jnl
IEEE Commun. Mag.
Jack H. Winters, Richard D. Gitlin, Sanjay Kasturia
1991 A* conf
INFOCOM
Zygmunt J. Haas, Jack H. Winters
1991 Misc conf
ICASSP
Jack H. Winters, Ender Ayanoglu, Israel Bar-David, Richard D. Gitlin, Chih-Lin I
1991 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Jack H. Winters, Ender Ayanoglu, Israel Bar-David, Richard D. Gitlin, Chih-Lin I
1991 J jnl
IEEE J. Sel. Areas Commun.
Sanjay Kasturia, Jack H. Winters
1990 J jnl
IEEE Trans. Commun.
Jack H. Winters, Richard D. Gitlin
1989 J jnl
Neural Networks
Jack H. Winters, Christopher Rose
1989 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Anthony S. Acampora, Jack H. Winters
1988 conf
ICNN
Jack H. Winters
1987 J jnl
IEEE J. Sel. Areas Commun.
Anthony S. Acampora, Jack H. Winters
1987 J jnl
IEEE Trans. Commun.
Jack H. Winters
1987 J jnl
IEEE J. Sel. Areas Commun.
Jack H. Winters
1987 J jnl
IEEE Trans. Commun.
Jack H. Winters
1987 J jnl
IEEE Commun. Mag.
Anthony S. Acampora, Jack H. Winters
1984 J jnl
IEEE Trans. Commun.
Jack H. Winters
1982 J jnl
IEEE Trans. Commun.
Jack H. Winters
redb/extractors/elf_extractors/elf_relocations.py
← Index redb/extractors/elf_extractors/elf_relocations.py python
import inspect
from datetime import datetime, timezone
from typing import Any, List, Dict

from elftools.elf.elffile import ELFFile
from elftools.common.exceptions import ELFError

from redb.extractors.enum import Tag
from redb.extractors.elf_extractor import ELFExtractor
from redb.models.dataclasses import ELFRelocation


class ELFRelocationExtractor(ELFExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        elf=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            elf,
        )
        self.elf_relocations = []
        self.elastic_index = self.index_prefix + "-elf_relocations"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _get_relocation_type_string(self, reloc_type: int, machine_arch: str) -> str:
        """Convert relocation type number to human-readable string based on architecture."""
        # This is a simplified mapping - real implementation would need comprehensive
        # architecture-specific relocation type mappings

        common_types = {
            0: "R_NONE",
            1: "R_DIRECT",
            2: "R_PC_RELATIVE",
            3: "R_GOT",
            4: "R_PLT",
            5: "R_COPY",
            6: "R_GLOB_DAT",
            7: "R_JMP_SLOT",
            8: "R_RELATIVE"
        }

        # Architecture-specific mappings could be added here
        if machine_arch == "x86_64":
            x86_64_types = {
                1: "R_X86_64_64",
                2: "R_X86_64_PC32",
                3: "R_X86_64_GOT32",
                4: "R_X86_64_PLT32",
                5: "R_X86_64_COPY",
                6: "R_X86_64_GLOB_DAT",
                7: "R_X86_64_JUMP_SLOT",
                8: "R_X86_64_RELATIVE"
            }
            return x86_64_types.get(reloc_type, f"R_X86_64_{reloc_type}")
        elif machine_arch == "x86":
            i386_types = {
                1: "R_386_32",
                2: "R_386_PC32",
                3: "R_386_GOT32",
                4: "R_386_PLT32",
                5: "R_386_COPY",
                6: "R_386_GLOB_DAT",
                7: "R_386_JMP_SLOT",
                8: "R_386_RELATIVE"
            }
            return i386_types.get(reloc_type, f"R_386_{reloc_type}")

        return common_types.get(reloc_type, f"R_UNKNOWN_{reloc_type}")

    def _extract_relocation_data(self, relocation, section_name: str, machine_arch: str) -> Dict:
        """Extract data from a single relocation entry."""
        try:
            # Get relocation offset
            relocation_offset = relocation.entry.get('r_offset', 0)

            # Get relocation type
            relocation_type = relocation.entry.get('r_info_type', 0)

            # Get symbol index
            relocation_symbol_index = relocation.entry.get('r_info_sym', 0)

            # Get addend (only present in RELA sections)
            relocation_addend = None
            if hasattr(relocation.entry, 'r_addend'):
                relocation_addend = relocation.entry.get('r_addend', 0)

            # Get symbol name if available
            relocation_symbol_name = ""
            if hasattr(relocation, 'symbol') and relocation.symbol:
                relocation_symbol_name = relocation.symbol.name or f"<symbol_{relocation_symbol_index}>"
            else:
                relocation_symbol_name = f"<symbol_{relocation_symbol_index}>"

            # Get type string mapping
            relocation_type_str = self._get_relocation_type_string(relocation_type, machine_arch)

            return ELFRelocation(
                relocation_offset=relocation_offset,
                relocation_type=relocation_type,
                relocation_type_str=relocation_type_str,
                relocation_symbol_index=relocation_symbol_index,
                relocation_symbol_name=relocation_symbol_name,
                relocation_section=section_name,
                relocation_addend=relocation_addend
            )

        except Exception as e:
            self.log.error(f"Error extracting relocation data: {e}")
            return None

    def _extract_relocations_from_section(self, section, machine_arch: str) -> List[Dict]:
        """Extract all relocations from a relocation section."""
        relocations = []

        try:
            if not hasattr(section, 'iter_relocations'):
                return relocations

            section_name = section.name or f"<unnamed_section>"

            for relocation in section.iter_relocations():
                reloc_data = self._extract_relocation_data(relocation, section_name, machine_arch)
                if reloc_data:
                    relocations.append(reloc_data)

        except Exception as e:
            self.log.error(f"Error extracting relocations from section {section.name}: {e}")

        return relocations

    def tag(self):
        return Tag.ELF_RELOCATIONS.value if hasattr(Tag, 'ELF_RELOCATIONS') else "elf_relocations"

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)

            def extract_data(elf):
                # Get architecture for relocation type mapping
                machine_arch = self._get_architecture()
                all_relocations = []

                # Iterate through all sections looking for relocation sections with per-section error handling
                for section_index, section in enumerate(elf.iter_sections()):
                    try:
                        # Check if this is a relocation section (.rel or .rela)
                        if (section.name and
                            (section.name.startswith('.rel') or section.name.startswith('.rela')) and
                            hasattr(section, 'iter_relocations')):

                            section_relocations = self._extract_relocations_from_section(section, machine_arch)
                            all_relocations.extend(section_relocations)
                            self.log.debug(f"Extracted {len(section_relocations)} relocations from section {section.name}")
                    except Exception as e:
                        section_name = getattr(section, 'name', f'section_{section_index}')
                        self.log.warning(f"Error processing relocation section {section_name}: {e}")
                        # Continue processing other sections

                return all_relocations

            if not self._is_elf_file():
                return None

            result = self._with_elf_file(extract_data)
            if result is None:
                return None

            self.elf_relocations = result
            return self.elf_relocations

        except Exception as e:
            self.log.error(f"Error extracting ELF relocations {self.hash.sha256}: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        self.log.debug(inspect.currentframe().f_code.co_name)

        if exporter_type == "ElasticsearchExporter":
            return self.elf_relocations
        elif exporter_type == "ClickHouseExporter":
            try:
                # Return valid empty structure if no relocations (e.g., statically linked binary)
                # None is reserved for actual errors

                # Prepare data arrays for all relocations
                data = []
                current_time = datetime.now(timezone.utc)
                for reloc in self.elf_relocations:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        reloc.relocation_offset,
                        reloc.relocation_type,
                        reloc.relocation_type_str,
                        reloc.relocation_symbol_index,
                        reloc.relocation_symbol_name,
                        reloc.relocation_addend,
                        reloc.relocation_section,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'relocation_offset', 'relocation_type', 'relocation_type_str',
                    'relocation_symbol_index', 'relocation_symbol_name',
                    'relocation_addend', 'relocation_section',
                    'analysis_date'
                ]

                if not data:
                    return None

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'UInt64', 'UInt32', 'LowCardinality(String)',
                    'UInt32', 'LowCardinality(String)',
                    'Nullable(Int64)', 'LowCardinality(String)',
                    'DateTime64(3, \'UTC\')'
                ]

                return (data, column_names, column_type_names)

            except Exception as e:
                self.log.error(f"Error preparing export data: {e}")
                raise

    def get_clickhouse_table(self) -> str:
        return "redb_elf_relocations"