Kanak Agarwal

64 papers A* 13A 9C 4Journal 12Unranked 26
YearRankTypeTitle / Venue / Authors
2020 conf
HotEdge
Alexandre Ferreira, Eric Van Hensbergen, Chris Adeniyi-Jones, Edmund Grimley-Evans, Josh Minor, Mark Nutter, Luis E. Peña, Kanak Agarwal, Jon Hermes
2016 A* conf
SIGCOMM
Keqiang He, Eric Rozner, Kanak Agarwal, Yu (Jason) Gu, Wes Felter, John B. Carter, Aditya Akella
2016 J jnl
IBM J. Res. Dev.
Ahmed Gheith, Ramakrishnan Rajamony, Patrick J. Bohrer, Kanak Agarwal, Michael Kistler, B. L. White Eagle, C. A. Hambridge, John B. Carter, T. Kaplinger
2015 A* conf
SIGCOMM
Keqiang He, Eric Rozner, Kanak Agarwal, Wes Felter, John B. Carter, Aditya Akella
2015 conf
IRPS
Raphael Robertazzi, Kanak Agarwal, Bucknell Webb, Christy Tyberg
2014 conf
ONS
Jeff Rasley, Brent E. Stephens, Colin Dixon, Eric Rozner, Wes Felter, Kanak Agarwal, John B. Carter, Rodrigo Fonseca
2014 A* conf
SIGCOMM
Jeff Rasley, Brent E. Stephens, Colin Dixon, Eric Rozner, Wes Felter, Kanak Agarwal, John B. Carter, Rodrigo Fonseca
2014 conf
HotSDN
Kanak Agarwal, Eric Rozner, Colin Dixon, John B. Carter
2014 conf
HotSDN
Kanak Agarwal, Colin Dixon, Eric Rozner, John B. Carter
2014 A conf
ICWS
Kanak Agarwal
2013 conf
ASAP
Kanak Agarwal, Raphael Polig
2012 conf
ASP-DAC
Vivek Joshi, Kanak Agarwal, Dennis Sylvester
2011 A conf
ICCAD
Rouwaida Kanj, Tong Li, Rajiv V. Joshi, Kanak Agarwal, Ali Sadigh, David Winston, Sani R. Nassif
2011 A* conf
DAC
Jim Aarestad, Charles Lamech, Jim Plusquellic, Dhruva Acharyya, Kanak Agarwal
2011 conf
ISQED
Jim Plusquellic, Dhruva Acharyya, Kanak Agarwal
2011 A conf
ICCAD
Charles Lamech, Jim Aarestad, Jim Plusquellic, Reza M. Rad, Kanak Agarwal
2010 A conf
ICCAD
Cheng Zhuo, Kanak Agarwal, David T. Blaauw, Dennis Sylvester
2010 A conf
ICCAD
Vivek Joshi, Kanak Agarwal, David T. Blaauw, Dennis Sylvester
2010 conf
ASP-DAC
Vivek Joshi, Kanak Agarwal, Dennis Sylvester, David T. Blaauw
2010 A* conf
DAC
Vivek Joshi, Valeriy Sukharev, Andres Torres, Kanak Agarwal, Dennis Sylvester, David T. Blaauw
2010 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Harmander Singh, Rahul M. Rao, Kanak Agarwal, Dennis Sylvester, Richard B. Brown
2010 A* conf
DAC
Kanak Agarwal
2010 A conf
ITC
Dhruva Acharyya, Kanak Agarwal, Jim Plusquellic
2010 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Vivek Joshi, Brian Cline, Dennis Sylvester, David T. Blaauw, Kanak Agarwal
2010 conf
ACM Great Lakes Symposium on VLSI
Kanak Agarwal
2010 conf
ISQED
Vivek Joshi, Kanak Agarwal, Dennis Sylvester
2009 A conf
ICCAD
Kanak Agarwal, Dhruva Acharyya, Jim Plusquellic
2009 conf
ISQED
Nancy Ying Zhou, Rouwaida Kanj, Kanak Agarwal, Zhuo Li, Rajiv V. Joshi, Sani R. Nassif, Weiping Shi
2008 conf
ISQED
Victoria Wang, Kanak Agarwal, Sani R. Nassif, Kevin J. Nowka, Dejan Markovic
2008 conf
CICC
Kevin J. Nowka, Sani R. Nassif, Kanak Agarwal
2008 A* conf
DAC
Vivek Joshi, Brian Cline, Dennis Sylvester, David T. Blaauw, Kanak Agarwal
2008 conf
ISPD
Vivek Joshi, Brian Cline, Dennis Sylvester, David T. Blaauw, Kanak Agarwal
2008 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Kanak Agarwal, Sani R. Nassif
2008 J jnl
Integr.
Dennis Sylvester, Kanak Agarwal, Saumil Shah
2007 A* conf
DAC
Kanak Agarwal, Sani R. Nassif
2007 conf
ISQED
Kanak Agarwal, Kevin J. Nowka
2007 A conf
ICCAD
Kanak Agarwal, Frank Liu
2007 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Harmander Singh, Kanak Agarwal, Dennis Sylvester, Kevin J. Nowka
2007 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Kanak Agarwal, Rahul M. Rao, Dennis Sylvester, Richard B. Brown
2007 conf
ESSCIRC
Wei Zhao, Yu Cao, Frank Liu, Kanak Agarwal, Dhruva Acharyya, Sani R. Nassif, Kevin J. Nowka
2006 C conf
ISCAS
Emrah Acar, Kanak Agarwal, Sani R. Nassif
2006 C conf
ISCAS
Sani R. Nassif, Kanak Agarwal, Emrah Acar
2006 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Kanak Agarwal, Dennis Sylvester, David T. Blaauw
2006 conf
ISQED
Kanak Agarwal, Kevin J. Nowka, Harmander Deogun, Dennis Sylvester
2006 A* conf
DAC
Kanak Agarwal, Sani R. Nassif
2006 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Kanak Agarwal, Mridul Agarwal, Dennis Sylvester, David T. Blaauw
2005 A* conf
DAC
Ashish Srivastava, Saumil Shah, Kanak Agarwal, Dennis Sylvester, David T. Blaauw, Stephen W. Director
2005 conf
ASP-DAC
Kanak Agarwal, Dennis Sylvester, David T. Blaauw, Anirudh Devgan
2005 conf
ISQED
Rahul M. Rao, Kanak Agarwal, Anirudh Devgan, Kevin J. Nowka, Dennis Sylvester, Richard B. Brown
2005 conf
ISCAS (1)
Rahul M. Rao, Kanak Agarwal, Dennis Sylvester, Himanshu Kaul, Richard B. Brown, Sani R. Nassif
2005 conf
ASP-DAC
Mridul Agarwal, Kanak Agarwal, Dennis Sylvester, David T. Blaauw
2004 C conf
ICCD
Saumil Shah, Kanak Agarwal, Dennis Sylvester
2004 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Kanak Agarwal, Dennis Sylvester, David T. Blaauw
2004 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Kanak Agarwal, Dennis Sylvester, David T. Blaauw
2004 conf
ASP-DAC
Kanak Agarwal, Dennis Sylvester, David T. Blaauw
2004 A conf
ISLPED
Rahul M. Rao, Kanak Agarwal, Dennis Sylvester, Richard B. Brown, Kevin J. Nowka, Sani R. Nassif
2004 A* conf
DAC
Kanak Agarwal, Dennis Sylvester, David T. Blaauw, Frank Liu, Sani R. Nassif, Sarma B. K. Vrudhula
2003 A* conf
DAC
Kanak Agarwal, Dennis Sylvester, David T. Blaauw
2003 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Takashi Sato, Yu Cao, Kanak Agarwal, Dennis Sylvester, Chenming Hu
2003 conf
SoC
Kanak Agarwal, Dennis Sylvester, David T. Blaauw
2003 C conf
ICCD
Shidhartha Das, Kanak Agarwal, David T. Blaauw, Dennis Sylvester
2003 A* conf
DAC
Kanak Agarwal, Dennis Sylvester, David T. Blaauw
2002 conf
Timing Issues in the Specification and Synthesis of Digital Systems
Kanak Agarwal, Dennis Sylvester, David T. Blaauw
2002 conf
ASP-DAC/VLSI Design
Kanak Agarwal, Yu Cao, Takashi Sato, Dennis Sylvester, Chenming Hu
redb/extractors/elf_extractors/elf_exports.py
← Index redb/extractors/elf_extractors/elf_exports.py python
import inspect
from datetime import datetime, timezone
from typing import Any, List, Set

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 ELFExport


class ELFExportExtractor(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_exports = None
        self.elastic_index = self.index_prefix + "-elf_exports"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _get_exported_functions_from_symbols(self, elf) -> Set[str]:
        """Extract exported functions from symbol tables."""
        exported_functions = set()

        try:
            # Check both static (.symtab) and dynamic (.dynsym) symbol tables
            symbol_sections = ['.symtab', '.dynsym']

            for section_name in symbol_sections:
                section = elf.get_section_by_name(section_name)
                if not section or not hasattr(section, 'iter_symbols'):
                    continue

                for symbol in section.iter_symbols():
                    # Check if symbol is exported (defined and globally visible)
                    if (symbol.name and
                        symbol.entry.get('st_shndx', 0) != 'SHN_UNDEF' and  # Not undefined
                        symbol.entry.get('st_info', {}).get('bind') in ['STB_GLOBAL', 'STB_WEAK'] and  # Global or weak binding
                        symbol.entry.get('st_info', {}).get('type') in ['STT_FUNC', 'STT_OBJECT']):  # Function or object

                        # Additional checks for meaningful exports
                        if (symbol.entry.get('st_value', 0) > 0 or  # Has a value
                            symbol.entry.get('st_size', 0) > 0):    # Has a size
                            exported_functions.add(symbol.name)

        except Exception as e:
            self.log.error(f"Error extracting exported functions from symbols: {e}")

        return exported_functions

    def _get_exported_functions_from_dynamic_section(self, elf) -> Set[str]:
        """Extract exported functions information from dynamic section."""
        exported_functions = set()

        try:
            # Get the dynamic section
            dynamic_section = elf.get_section_by_name('.dynamic')
            if not dynamic_section:
                return exported_functions

            # Look for version definition sections that might indicate exports
            # This is complementary to symbol table analysis
            for tag in dynamic_section.iter_tags():
                if tag.entry.d_tag == 'DT_SONAME':
                    # If it has a SONAME, it's likely a shared library with exports
                    # The actual exports are still found in symbol tables
                    pass

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

        return exported_functions

    def _filter_meaningful_exports(self, exports: Set[str]) -> Set[str]:
        """Filter out compiler-generated and internal symbols to focus on meaningful exports."""
        filtered_exports = set()

        # Common patterns to exclude (compiler-generated, internal symbols)
        exclude_patterns = [
            '_start',
            '_init',
            '_fini',
            '__libc_',
            '__gmon_start__',
            '_IO_stdin_used',
            '__data_start',
            '__bss_start',
            '_edata',
            '_end',
            '__TMC_END__',
            '_ITM_deregisterTMCloneTable',
            '_ITM_registerTMCloneTable',
            '__cxa_finalize',
            '__gxx_personality_v0',
            '_Jv_RegisterClasses'
        ]

        for export in exports:
            # Skip empty or very short names
            if not export or len(export) < 2:
                continue

            # Skip symbols that match exclude patterns
            skip = False
            for pattern in exclude_patterns:
                if export.startswith(pattern):
                    skip = True
                    break

            # Skip symbols that look like internal mangled names (but keep reasonable C++ names)
            if export.startswith('_Z') and len(export) > 50:  # Very long mangled names
                skip = True

            if not skip:
                filtered_exports.add(export)

        return filtered_exports

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

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

            def extract_data(elf):
                # Extract exported functions from multiple sources
                exported_functions = set()

                # From symbol tables (primary source)
                symbol_exports = self._get_exported_functions_from_symbols(elf)
                exported_functions.update(symbol_exports)

                # From dynamic section (supplementary)
                dynamic_exports = self._get_exported_functions_from_dynamic_section(elf)
                exported_functions.update(dynamic_exports)

                # Filter out compiler-generated and internal symbols
                meaningful_exports = self._filter_meaningful_exports(exported_functions)

                # Convert to sorted list for consistent output
                export_functions_list = sorted(list(meaningful_exports))

                # Return ELFExport dataclass
                return ELFExport(
                    elf_exports_total=len(export_functions_list),
                    elf_export_functions=export_functions_list,
                )

            if not self._is_elf_file():
                return None

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

            self.elf_exports = result
            return self.elf_exports

        except Exception as e:
            self.log.error(f"Error extracting ELF exports {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_exports
        elif exporter_type == "ClickHouseExporter":
            try:
                if not self.elf_exports:
                    return None

                # Prepare data array
                data = [[
                    self.sha256,
                    self.md5,
                    self.sha1,
                    self.elf_exports.elf_exports_total,
                    self.elf_exports.elf_export_functions,
                    datetime.now(timezone.utc)
                ]]

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'elf_exports_total',
                    'elf_export_functions',
                    'analysis_date'
                ]

                if not data:
                    return None

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'UInt32',
                    'Array(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_exports"