Viktor K. Decyk

46 papers A 1C 2Misc 4Journal 35Unranked 4
YearRankTypeTitle / Venue / Authors
2025 J jnl
J. Comput. Phys.
Qianqian Su, F. Li, W. An, Viktor K. Decyk, Y. Zhao, L. Hildebrand, T. N. Dalichaouch, S. Zhou, Emilly Pereira Alves, Ann S. Almgren, Warren B. Mori
2023 J jnl
Comput. Phys. Commun.
Viktor K. Decyk, Warren B. Mori, Fei Li
2022 J jnl
J. Comput. Phys.
Fei Li, Weiming An, Frank S. Tsung, Viktor K. Decyk, Warren B. Mori
2021 J jnl
Comput. Phys. Commun.
Fei Li, Kyle G. Miller, Xinlu Xu, Frank S. Tsung, Viktor K. Decyk, Weiming An, Ricardo A. Fonseca, Warren B. Mori
2021 J jnl
Comput. Phys. Commun.
Fei Li, Weiming An, Viktor K. Decyk, Xinlu Xu, Mark J. Hogan, Warren B. Mori
2021 J jnl
J. Comput. Phys.
Fei Li, Viktor K. Decyk, Kyle G. Miller, Adam Tableman, Frank S. Tsung, Marija Vranic, Ricardo A. Fonseca, Warren B. Mori
2021 J jnl
Comput. Phys. Commun.
Kyle G. Miller, Roman P. Lee, Adam Tableman, Anton Helm, Ricardo A. Fonseca, Viktor K. Decyk, Warren B. Mori
2020 J jnl
J. Comput. Phys.
Xinlu Xu, Fei Li, Frank S. Tsung, Thamine Dalichaouch, Weiming An, Han Wen, Viktor K. Decyk, Ricardo A. Fonseca, Mark J. Hogan, Warren B. Mori
2017 J jnl
Comput. Phys. Commun.
Fei Li, Peicheng Yu, Xinlu Xu, Frederico Fiuza, Viktor K. Decyk, Thamine Dalichaouch, Asher Davidson, Adam Tableman, Weiming An, Frank S. Tsung, Ricardo A. Fonseca, Wei Lu, Warren B. Mori
2016 J jnl
J. Comput. Phys.
Peicheng Yu, Xinlu Xu, Asher Davidson, Adam Tableman, Thamine Dalichaouch, Fei Li, Michael D. Meyers, Weiming An, Frank S. Tsung, Viktor K. Decyk, Frederico Fiuza, Jorge Vieira, Ricardo A. Fonseca, Wei Lu, Luís O. Silva, Warren B. Mori
2015 J jnl
Comput. Phys. Commun.
Peicheng Yu, Xinlu Xu, Viktor K. Decyk, Frederico Fiuza, Jorge Vieira, Frank S. Tsung, Ricardo A. Fonseca, Wei Lu, Luís O. Silva, Warren B. Mori
2015 J jnl
Supercomput. Front. Innov.
Ben Swift, Andrew Sorensen, Henry Gardner, Peter Davis, Viktor K. Decyk
2015 J jnl
Comput. Phys. Commun.
Peicheng Yu, Xinlu Xu, Adam Tableman, Viktor K. Decyk, Frank S. Tsung, Frederico Fiuza, Asher Davidson, Jorge Vieira, Ricardo A. Fonseca, Wei Lu, Luís O. Silva, Warren B. Mori
2015 J jnl
Comput. Sci. Eng.
Viktor K. Decyk
2014 J jnl
J. Comput. Phys.
Peicheng Yu, Xinlu Xu, Viktor K. Decyk, Weiming An, Jorge Vieira, Frank S. Tsung, Ricardo A. Fonseca, Wei Lu, Luís O. Silva, Warren B. Mori
2014 J jnl
Comput. Phys. Commun.
Viktor K. Decyk, Tajendra V. Singh
2013 J jnl
J. Comput. Phys.
Weiming An, Viktor K. Decyk, Warren B. Mori, Thomas M. Antonsen Jr.
2013 J jnl
Comput. Phys. Commun.
Xinlu Xu, Peicheng Yu, Samuel F. Martins, Frank S. Tsung, Viktor K. Decyk, Jorge Vieira, Ricardo A. Fonseca, Wei Lu, Luís O. Silva, Warren B. Mori
2011 J jnl
Comput. Phys. Commun.
Viktor K. Decyk, Tajendra V. Singh
2011 J jnl
J. Comput. Phys.
Xianglong Kong, Michael C. Huang, Chuang Ren, Viktor K. Decyk
2009 J jnl
J. Comput. Phys.
Beng Feng, Chengkun Huang, Viktor K. Decyk, Warren B. Mori, Patric Muggli, Thomas C. Katsouleas
2008 J jnl
Comput. Phys. Commun.
Viktor K. Decyk, Henry J. Gardner
2007 Misc conf
International Conference on Computational Science (1)
Viktor K. Decyk, Henry J. Gardner
2007 J jnl
Sci. Program.
Joseph Wang, Yong Cao, Raed Kafafy, Viktor K. Decyk
2007 J jnl
Sci. Program.
Charles D. Norton, Viktor K. Decyk, Boleslaw K. Szymanski, Henry J. Gardner
2007 J jnl
Comput. Phys. Commun.
Viktor K. Decyk
2007 J jnl
Comput. Sci. Eng.
Viktor K. Decyk, Charles D. Norton, Henry J. Gardner
2006 J jnl
J. Comput. Phys.
Chengkun Huang, Viktor K. Decyk, Chuang Ren, M. Zhou, Wei Lu, Warren B. Mori, James H. Cooley, Thomas M. Antonsen Jr., Thomas C. Katsouleas
2005 Misc conf
International Conference on Computational Science (2)
Dean E. Dauger, Viktor K. Decyk
2005 J jnl
Comput. Sci. Eng.
Dean E. Dauger, Viktor K. Decyk
2004 J jnl
Sci. Program.
Viktor K. Decyk, Charles D. Norton
2004 J jnl
Comput. Phys. Commun.
James C. Kniep, Jean-Noel G. Leboeuf, Viktor K. Decyk
2004 J jnl
Comput. Phys. Commun.
J. Tonge, Dean E. Dauger, Viktor K. Decyk
2004 J jnl
Comput. Phys. Commun.
Viktor K. Decyk, Charles D. Norton
2003 C conf
CLUSTER
Dean E. Dauger, Viktor K. Decyk
2002 Misc conf
International Conference on Computational Science (3)
Ricardo A. Fonseca, Luís O. Silva, Frank S. Tsung, Viktor K. Decyk, Wei Lu, Chuang Ren, Warren B. Mori, S. Deng, S. Lee, Thomas C. Katsouleas, J. C. Adam
2001 C conf
CLUSTER
Dean E. Dauger, Viktor K. Decyk
2001 Misc conf
PPAM
Viktor K. Decyk, Dean E. Dauger
1999 A conf
SC
Ji Qiang, Robert D. Ryne, Salman Habib, Viktor K. Decyk
1998 conf
ECOOP Workshops
Charles D. Norton, Viktor K. Decyk, Joan Slottow
1997 conf
PP
Charles D. Norton, Viktor K. Decyk, Boleslaw K. Szymanski
1997 J jnl
Sci. Program.
Viktor K. Decyk, Charles D. Norton, Boleslaw K. Szymanski
1995 J jnl
Commun. ACM
Charles D. Norton, Boleslaw K. Szymanski, Viktor K. Decyk
1995 conf
PP
Charles D. Norton, Boleslaw K. Szymanski, Viktor K. Decyk
1991 J jnl
Int. J. High Perform. Comput. Appl.
John M. Dawson, Richard D. Sydora, Viktor K. Decyk, Paulette C. Liewer, Robert D. Ferraro
1988 conf
C³P
Paulette C. Liewer, Viktor K. Decyk, John M. Dawson, Geoffrey C. Fox
redb/extractors/elf_extractors/elf_dependencies.py
← Index redb/extractors/elf_extractors/elf_dependencies.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 ELFDependency


class ELFDependencyExtractor(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_dependencies = []
        self.elastic_index = self.index_prefix + "-elf_dependencies"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _map_dependency_type(self, dt_tag_str: str) -> int:
        """Map dynamic tag string to enum value."""
        type_map = {
            'DT_NEEDED': 1,
            'DT_SONAME': 14,
            'DT_RPATH': 15,
            'DT_RUNPATH': 29
        }
        return type_map.get(dt_tag_str, 0)

    def _extract_dynamic_dependencies(self, elf) -> List[Dict]:
        """Extract dependencies from the dynamic section."""
        dependencies = []

        try:
            # Get the dynamic section
            dynamic_section = elf.get_section_by_name('.dynamic')
            if not dynamic_section:
                self.log.debug("No .dynamic section found")
                return dependencies

            # Iterate through dynamic tags
            for tag in dynamic_section.iter_tags():
                dt_tag = tag.entry.d_tag

                # Handle different dependency types
                if dt_tag == 'DT_NEEDED':
                    # Required library
                    dependency_name = tag.needed
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_NEEDED'),
                        dependency_type_str='NEEDED'
                    ))

                elif dt_tag == 'DT_SONAME':
                    # Shared object name
                    dependency_name = tag.soname
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_SONAME'),
                        dependency_type_str='SONAME'
                    ))

                elif dt_tag == 'DT_RPATH':
                    # Runtime library search path
                    dependency_name = tag.rpath
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_RPATH'),
                        dependency_type_str='RPATH'
                    ))

                elif dt_tag == 'DT_RUNPATH':
                    # Runtime library search path (newer)
                    dependency_name = tag.runpath
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_RUNPATH'),
                        dependency_type_str='RUNPATH'
                    ))

        except Exception as e:
            self.log.error(f"Error extracting dynamic dependencies: {e}")

        return dependencies

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

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

            def extract_data(elf):
                # Extract dependencies - returns list of ELFDependency dataclasses
                dependencies = self._extract_dynamic_dependencies(elf)
                return dependencies

            if not self._is_elf_file():
                return None

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

            self.elf_dependencies = result
            return self.elf_dependencies

        except Exception as e:
            self.log.error(f"Error extracting ELF dependencies {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_dependencies
        elif exporter_type == "ClickHouseExporter":
            try:
                # Return valid empty structure if no dependencies (e.g., statically linked binary)
                # None is reserved for actual errors

                # Prepare data arrays for all dependencies
                data = []
                current_time = datetime.now(timezone.utc)
                for dep in self.elf_dependencies:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        dep.dependency_name,
                        dep.dependency_type,
                        dep.dependency_type_str,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'dependency_name', 'dependency_type', 'dependency_type_str',
                    'analysis_date'
                ]

                if not data:
                    return None

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'LowCardinality(String)',
                    "Enum8('NEEDED'=1, 'SONAME'=14, 'RPATH'=15, 'RUNPATH'=29)",
                    '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_dependencies"