Raghava Rao Mukkamala

79 papers A 1B 9C 4Misc 1Journal 18Unranked 46
YearRankTypeTitle / Venue / Authors
2026 conf
HICSS
Konstantinos Katharakis, Sippo Rossi, Raghava Rao Mukkamala
2025 B conf
IEEE Big Data
Animesh Raj, Zayed Haque, K. Shantha Kumari, P. Kanmani, Raghava Rao Mukkamala
2025 J jnl
CoRR
Konstantinos Katharakis, Sippo Rossi, Raghava Rao Mukkamala
2025 B conf
IEEE Big Data
Konstantinos Katharakis, Ana Paula Garcia, Joana Rio Maior, Sarah Sophie Nagel, Raghava Rao Mukkamala
2024 J jnl
CoRR
Sippo Rossi, Alisia Marianne Michel, Raghava Rao Mukkamala, Jason Bennett Thatcher
2024 J jnl
Int. J. Inf. Manag.
Sippo Rossi, Matti Rossi, Raghava Rao Mukkamala, Jason Bennett Thatcher, Yogesh K. Dwivedi
2024 J jnl
Trans. Emerg. Telecommun. Technol.
Ashutosh Dhar Dwivedi, Rajani Singh, Keshav Kaushik, Raghava Rao Mukkamala, Waleed S. Alnumay
2024 conf
HICSS
Somnath Mazumdar, Abid Hussain, Raghava Rao Mukkamala
2024 J jnl
Internet Res.
Jayesh Prakash Gupta, Hongxiu Li, Hannu Kärkkäinen, Raghava Rao Mukkamala
2023 J jnl
IEEE Intell. Transp. Syst. Mag.
Malte Bieler, Raghava Rao Mukkamala, Tor-Morten Grønli
2023 conf
HICSS
Sippo Rossi, Youngjin Kwon, Odd Harald Auglend, Raghava Rao Mukkamala, Matti Rossi, Jason Thatcher
2023 J jnl
J. Assoc. Inf. Syst.
Raghava Rao Mukkamala, Robert J. Kauffman, Helle Zinner Henriksen
2022 J jnl
Sensors
Deepraj Chowdhury, Anik Das, Ajoy Dey, Shreya Sarkar, Ashutosh Dhar Dwivedi, Raghava Rao Mukkamala, Lakhindar Murmu
2022 conf
GLOBECOM (Workshops)
Deepraj Chowdhury, Rupanjan Das, Risav Rana, Ashutosh Dhar Dwivedi, Pushpita Chatterjee, Raghava Rao Mukkamala
2022 J jnl
CoRR
Sippo Rossi, Youngjin Kwon, Odd Harald Auglend, Raghava Rao Mukkamala, Matti Rossi, Jason Thatcher
2022 conf
ECIS
Tim Schurig, Sine Zambach, Raghava Rao Mukkamala, Malte Petry
2022 conf
HICSS
Günter Prockl, Dominik Roeck, Thomas Jensen, Somnath Mazumdar, Raghava Rao Mukkamala
2022 B conf
IEEE Big Data
Abhimanyu Bhowmik, Madhushree Sannigrahi, Deepraj Chowdhury, Ashutosh Dhar Dwivedi, Raghava Rao Mukkamala
2022 B conf
TrustCom
Saranda Poddar, Deepraj Chowdhury, Ashutosh Dhar Dwivedi, Raghava Rao Mukkamala
2022 J jnl
J. Ambient Intell. Humaniz. Comput.
Ashutosh Dhar Dwivedi, Rajani Singh, Uttam Ghosh, Raghava Rao Mukkamala, Amr Tolba, Omar Said
2022 J jnl
Comput. Electr. Eng.
Rajani Singh, Ashutosh Dhar Dwivedi, Raghava Rao Mukkamala, Waleed S. Alnumay
2022 J jnl
J. Netw. Comput. Appl.
Sophia Auer, Sophia Nagler, Somnath Mazumdar, Raghava Rao Mukkamala
2021 conf
HICSS
Somnath Mazumdar, Thomas Jensen, Raghava Rao Mukkamala, Robert J. Kauffman, Jan Damsgaard
2020 J jnl
SN Comput. Sci.
Rajakumaran Gayathri, Neelanarayanan Venkataraman, Raghava Rao Mukkamala
2020 conf
CENTERIS/ProjMAN/HCist
Abid Hussain, Lester Allan Lasrado, Raghava Rao Mukkamala, Usman Tanveer
2019 conf
HICSS
Benedict Faber, Georg Cappelen Michelet, Niklas Weidmann, Raghava Rao Mukkamala, Ravi Vatrapu
2019 J jnl
Art Sci. Eng. Program.
Paulius Juodisius, Atrisha Sarkar, Raghava Rao Mukkamala, Michal Antkiewicz, Krzysztof Czarnecki, Andrzej Wasowski
2019 conf
BIBM
Nadiya Straton, Hyeju Jang, Raymond T. Ng, Ravi Vatrapu, Raghava Rao Mukkamala
2019 conf
KMIS
Jayesh Prakash Gupta, Hannu Kärkkäinen, Karan Menon, Jukka Huhtamäki, Raghava Rao Mukkamala, Abid Hussain, Ravi Vatrapu, Jari Jussila, Henri Pirkkalainen, Thomas Olsson
2019 conf
BIBM
Nadiya Straton, Raymond T. Ng, Hyeju Jang, Ravi Vatrapu, Raghava Rao Mukkamala
2019 J jnl
J. Manag. Inf. Syst.
Haohua Sun Yin, Klaus Christian Langenheldt, Mikkel Alexander Harlev, Raghava Rao Mukkamala, Ravikiran Vatrapu
2019 conf
KMIS
Jayesh Prakash Gupta, Hannu Kärkkäinen, Osku Torro, Raghava Rao Mukkamala
2018 conf
BigData Congress
Fie Sternberg, Kasper Hedegaard Pedersen, Niklas Klve Ryelund, Raghava Rao Mukkamala, Ravi Vatrapu
2018 C conf
HealthCom
Xiaochen Zheng, Raghava Rao Mukkamala, Ravi Vatrapu, Joaquín B. Ordieres Meré
2018 conf
HICSS
Mikkel Alexander Harlev, Haohua Sun Yin, Klaus Christian Langenheldt, Raghava Rao Mukkamala, Ravi Vatrapu
2018 J jnl
CoRR
Paulius Juodisius, Atrisha Sarkar, Raghava Rao Mukkamala, Michal Antkiewicz, Krzysztof Czarnecki, Andrzej Wasowski
2018 conf
IEEE BigData
Raghava Rao Mukkamala, Ravi Vatrapu, Pradeep Kumar Ray, Gora Sengupta, Sankar Halder
2018 conf
IEEE BigData
Tor-Morten Grønli, Benjamin Flesch, Raghava Rao Mukkamala, Ravi Vatrapu, Sindre Klavestad, Herman Bergner
2018 conf
BigData Congress
Qi An, Morten Grimmig Christensen, Annith Ramachandran, Raghava Rao Mukkamala, Ravi Vatrapu
2017 conf
IEEE BigData
Benjamin Flesch, Ravi Vatrapu, Raghava Rao Mukkamala
2017 C conf
Healthcom
Jonathan-Raphael Reichert, Klaus Langholz Kristensen, Raghava Rao Mukkamala, Ravi Vatrapu
2017 conf
BigData Congress
Nadiya Straton, Raghava Rao Mukkamala, Ravi Vatrapu
2017 conf
BigData Congress
Nicolai H. Egebjerg, Niklas Hedegaard, Gerda Kuum, Raghava Rao Mukkamala, Ravi Vatrapu
2017 conf
IEEE BigData
Nadiya Straton, Raghava Rao Mukkamala, Ravi Vatrapu
2017 conf
HICSS
Desiree Christina Komtesse af Rosenborg, Ida Buhl-Andersen, Line Bygvrå Nilsson, Mark Philip Rebild, Raghava Rao Mukkamala, Abid Hussain, Ravi Vatrapu
2017 conf
IEEE BigData
Nadiya Straton, Ravi Vatrapu, Raghava Rao Mukkamala
2017 conf
MindTrek
Osku Torro, Jayesh Prakash Gupta, Hannu Kärkkäinen, Henri Pirkkalainen, Ravikiran Vatrapu, Raghava Rao Mukkamala, Abid Hussain
2017 C conf
ICIS
Xiao Xiao, Jonas Hedman, Felix Ter Chian Tan, Chee-Wee Tan, Torkil Clemmensen, Eric Tze Kuan Lim, Stefan Henningsson, Raghava Rao Mukkamala, Ravi Vatrapu, Jos van Hillegersberg
2017 conf
ECIS
Lester Allan Lasrado, Ravi Vatrapu, Raghava Rao Mukkamala
2016 conf
EUSPN/ICTH
Kjeld S. Hansen, Raghava Rao Mukkamala, Abid Hussain, Tor-Morten Grønli, Henning Langberg, Ravi Vatrapu
2016 C conf
HealthCom
Nadiya Straton, Kjeld Hansen, Raghava Rao Mukkamala, Abid Hussain, Tor-Morten Grønli, Henning Langberg, Ravi Vatrapu
2016 conf
IEEE BigData
Anna Hennig, Anne-Sofie Amodt, Henrik Hernes, Helene Mejer Nygardsmoen, Peter Arenfeldt Larsen, Raghava Rao Mukkamala, Benjamin Flesch, Abid Hussain, Ravi Vatrapu
2016 conf
HICSS
Jari Jussila, Karan Menon, Raghava Rao Mukkamala, Lester Allan Lasrado, Abid Hussain, Ravi Vatrapu, Hannu Kärkkäinen, Jukka Huhtamäki
2016 conf
IEEE BigData
Linda Camilla Boldt, Vinothan Vinayagamoorthy, Florian Winder, Melanie Schnittger, Mats Ekran, Raghava Rao Mukkamala, Niels Buus Lassen, Benjamin Flesch, Abid Hussain, Ravi Vatrapu
2016 conf
BigData Congress
Lasse Korsholm Poulsen, Daan Dekkers, Nicolaas Wagenaar, Wesley Snijders, Ben Lewinsky, Raghava Rao Mukkamala, Ravi Vatrapu
2016 conf
MindTrek
Jayesh Prakash Gupta, Karan Menon, Hannu Kärkkäinen, Jukka Huhtamäki, Raghava Rao Mukkamala, Abid Hussain, Ravi Vatrapu, Jari Jussila, Henri Pirkkalainen
2016 conf
LDIC
Aseem Kinra, Raghava Rao Mukkamala, Ravi Vatrapu
2016 J jnl
IEEE Access
Ravi Vatrapu, Raghava Rao Mukkamala, Abid Hussain, Benjamin Flesch
2016 conf
SetVR@Diagrams
Benjamin Flesch, Raghava Rao Mukkamala, Abid Hussain, Ravi Vatrapu
2016 conf
IEEE BigData
Henrikke Hovda Larsen, Johanna Margareta Forsberg, Sigrid Viken Hemstad, Raghava Rao Mukkamala, Abid Hussain, Ravi Vatrapu
2015 conf
BigData Congress
Raghava Rao Mukkamala, Jannie Iskou Sorensen, Abid Hussain, Ravi Vatrapu
2015 B conf
EDOC
Raghava Rao Mukkamala, Jannie Iskou Sorensen, Abid Hussain, Ravi Vatrapu
2015 conf
SMSociety
Ravi Vatrapu, Abid Hussain, Niels Buus Lassen, Raghava Rao Mukkamala, Benjamin Flesch, René Madsen
2015 conf
IEEE BigData
Benjamin Flesch, Ravi Vatrapu, Raghava Rao Mukkamala, Abid Hussain
2014 B conf
EDOC
Raghava Rao Mukkamala, Abid Hussain, Ravi K. Vatrapu
2014 conf
BigData Congress
Raghava Rao Mukkamala, Abid Hussain, Ravi K. Vatrapu
2013 J jnl
J. Log. Algebraic Methods Program.
Thomas T. Hildebrandt, Raghava Rao Mukkamala, Tijs Slaats, Francesco Zanitti
2013 conf
OTM Workshops
Thomas T. Hildebrandt, Morten Marquard, Raghava Rao Mukkamala, Tijs Slaats
2013 A conf
BPM
Tijs Slaats, Raghava Rao Mukkamala, Thomas T. Hildebrandt, Morten Marquard
2013 conf
FOAL
Thomas T. Hildebrandt, Raghava Rao Mukkamala, Tijs Slaats, Francesco Zanitti
2013 B conf
EDOC
Raghava Rao Mukkamala, Thomas T. Hildebrandt, Tijs Slaats
2011 conf
FHIES
Thomas T. Hildebrandt, Raghava Rao Mukkamala, Tijs Slaats
2011 B conf
EDOC
Thomas T. Hildebrandt, Raghava Rao Mukkamala, Tijs Slaats
2011 conf
FSEN
Thomas T. Hildebrandt, Raghava Rao Mukkamala, Tijs Slaats
2011 B conf
SEFM
Thomas T. Hildebrandt, Raghava Rao Mukkamala, Tijs Slaats
2010 conf
PLACES
Thomas T. Hildebrandt, Raghava Rao Mukkamala
2010 Misc conf
TASE
Raghava Rao Mukkamala, Thomas T. Hildebrandt
2008 conf
Business Process Management Workshops
Karen Marie Lyng, Thomas T. Hildebrandt, Raghava Rao Mukkamala
2008 conf
EDOCW
Raghava Rao Mukkamala, Thomas T. Hildebrandt, Janus Boris Tøth
redb/extractors/elf_extractor.py
← Index redb/extractors/elf_extractor.py python
import logging
from abc import ABCMeta, abstractmethod
import inspect

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

from redb.extractors.extractor import Extractor

logger = logging.getLogger(__name__)


@abstractmethod
class ELFExtractor(Extractor, metaclass=ABCMeta):

    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
        )
        # Store ELF object if provided, otherwise we'll create it per-operation for security
        self._provided_elf = elf
        self._elf_file_valid = None  # Cache validity check

    def _with_elf_file(self, operation):
        """Safely execute an operation with an ELF file using context manager.

        Args:
            operation: A callable that takes an ELFFile object and returns a result

        Returns:
            The result of the operation, or None if an error occurred
        """
        if self._provided_elf:
            try:
                return operation(self._provided_elf)
            except ELFError as e:
                if "String Table not found" in str(e):
                    self.log.warning(f"String table missing in ELF {self.hash.sha256}: {e}")
                    return None
                else:
                    self.log.error(f"ELF format error {self.hash.sha256} Full error: {e}")
                    return None
            except Exception as e:
                self.log.error(f"Error processing ELF file {self.hash.sha256} Full error: {e}")
                return None

        try:
            with open(self.filepath, 'rb') as f:
                elf = ELFFile(f)
                if not elf:
                    raise ELFError("Empty file?")
                return operation(elf)
        except ELFError as e:
            if "String Table not found" in str(e):
                self.log.warning(f"String table missing in ELF {self.hash.sha256}: {e}")
                return None
            else:
                self.log.error(f"ELF format error {self.hash.sha256} Full error: {e}")
                return None
        except Exception as e:
            self.log.error(f"Error reading ELF file {self.hash.sha256} Full error: {e}")
            return None

    def _is_elf_file(self):
        """Check if the file is a valid ELF binary."""
        if self._elf_file_valid is not None:
            return self._elf_file_valid

        def check_elf_validity(elf):
            # pyelftools ELFFile object existing means it's valid ELF
            # Just check that we can access the header
            header = elf.header
            return header is not None

        try:
            result = self._with_elf_file(check_elf_validity)
            self._elf_file_valid = bool(result)
            return self._elf_file_valid
        except Exception as e:
            self.log.error(f"Error checking ELF file: {e}")
            self._elf_file_valid = False
            return False

    def _is_64bit(self):
        """Check if the ELF binary is 64-bit."""
        def check_64bit(elf):
            return elf.header.get('e_ident', {}).get('EI_CLASS') == 'ELFCLASS64'

        try:
            result = self._with_elf_file(check_64bit)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking ELF bitness: {e}")
            return False

    def _is_stripped(self):
        """Check if the ELF binary is stripped (no symbol table)."""
        def check_stripped(elf):
            # Look for symbol table sections
            for section in elf.iter_sections():
                if section.name in ['.symtab', '.strtab']:
                    return False
            return True

        try:
            result = self._with_elf_file(check_stripped)
            return result if result is not None else True
        except Exception as e:
            self.log.error(f"Error checking if ELF is stripped: {e}")
            return True

    def _has_debug_info(self):
        """Check if the ELF binary contains debug information."""
        def check_debug_info(elf):
            # Look for debug sections
            debug_sections = ['.debug_info', '.debug_line', '.debug_str', '.debug_abbrev']
            for section in elf.iter_sections():
                if section.name in debug_sections:
                    return True
            return False

        try:
            result = self._with_elf_file(check_debug_info)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking debug info: {e}")
            return False

    def _get_architecture(self):
        """Get the architecture of the ELF binary."""
        def get_arch(elf):
            machine = elf.header.get('e_machine', 'EM_NONE')

            # Map common machine types to readable names
            arch_map = {
                'EM_386': 'x86',
                'EM_X86_64': 'x86_64',
                'EM_ARM': 'ARM',
                'EM_AARCH64': 'ARM64',
                'EM_MIPS': 'MIPS',
                'EM_PPC': 'PowerPC',
                'EM_PPC64': 'PowerPC64',
                'EM_SPARC': 'SPARC',
                'EM_RISCV': 'RISC-V'
            }

            return arch_map.get(machine, machine)

        try:
            result = self._with_elf_file(get_arch)
            return result if result is not None else "unknown"
        except Exception as e:
            self.log.error(f"Error getting architecture: {e}")
            return "unknown"

    def _get_endianness(self):
        """Get the endianness of the ELF binary."""
        def get_endian(elf):
            data_encoding = elf.header.get('e_ident', {}).get('EI_DATA')
            if data_encoding == 'ELFDATA2LSB':
                return "little"
            elif data_encoding == 'ELFDATA2MSB':
                return "big"
            return "unknown"

        try:
            result = self._with_elf_file(get_endian)
            return result if result is not None else "unknown"
        except Exception as e:
            self.log.error(f"Error getting endianness: {e}")
            return "unknown"

    def _get_file_type(self):
        """Get the file type of the ELF binary."""
        def get_file_type(elf):
            etype = elf.header.get('e_type', 'ET_NONE')

            # Map file types to readable names
            type_map = {
                'ET_NONE': 'none',
                'ET_REL': 'relocatable',
                'ET_EXEC': 'executable',
                'ET_DYN': 'shared_object',
                'ET_CORE': 'core_dump'
            }

            return type_map.get(etype, etype)

        try:
            result = self._with_elf_file(get_file_type)
            return result if result is not None else "unknown"
        except Exception as e:
            self.log.error(f"Error getting file type: {e}")
            return "unknown"

    def _is_pie(self):
        """Check if the ELF binary is position-independent executable."""
        def check_pie(elf):
            # PIE binaries are typically ET_DYN type
            etype = elf.header.get('e_type', 'ET_NONE')
            if etype == 'ET_DYN':
                # Check if it has an entry point (executable) vs library
                entry_point = elf.header.get('e_entry', 0)
                return entry_point > 0
            return False

        try:
            result = self._with_elf_file(check_pie)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking PIE: {e}")
            return False

    def _has_stack_protection(self):
        """Check if the binary has stack protection (canaries)."""
        def check_stack_protection(elf):
            # Look for stack protection symbols
            stack_symbols = ['__stack_chk_fail', '__stack_chk_guard']

            for section in elf.iter_sections():
                if hasattr(section, 'iter_symbols'):
                    for symbol in section.iter_symbols():
                        if symbol.name in stack_symbols:
                            return True
            return False

        try:
            result = self._with_elf_file(check_stack_protection)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking stack protection: {e}")
            return False

    def _has_nx_bit(self):
        """Check if the binary has NX bit (non-executable stack)."""
        def check_nx_bit(elf):
            # Look for GNU_STACK segment
            for segment in elf.iter_segments():
                if segment.header.get('p_type') == 'PT_GNU_STACK':
                    flags = segment.header.get('p_flags', 0)
                    # Check if execute flag is NOT set (NX enabled)
                    return not (flags & 0x1)  # PF_X = 0x1
            return False

        try:
            result = self._with_elf_file(check_nx_bit)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking NX bit: {e}")
            return False

    def _has_relro(self):
        """Check if the binary has RELRO (Relocation Read-Only)."""
        def check_relro(elf):
            # Look for GNU_RELRO segment
            for segment in elf.iter_segments():
                if segment.header.get('p_type') == 'PT_GNU_RELRO':
                    return True
            return False

        try:
            result = self._with_elf_file(check_relro)
            return bool(result)
        except Exception as e:
            self.log.error(f"Error checking RELRO: {e}")
            return False

    def _get_build_id(self):
        """Extract build ID from notes section."""
        def get_build_id(elf):
            # Look for build ID in notes sections
            for section in elf.iter_sections():
                if section.name == '.note.gnu.build-id':
                    for note in section.iter_notes():
                        if note['n_type'] == 'NT_GNU_BUILD_ID':
                            # Convert bytes to hex string
                            build_id = note['n_desc']
                            if isinstance(build_id, bytes):
                                return build_id.hex()
                            return str(build_id)
            return None

        try:
            result = self._with_elf_file(get_build_id)
            return result
        except Exception as e:
            self.log.error(f"Error getting build ID: {e}")
            return None

    def _count_sections(self):
        """Count the number of sections in the ELF file."""
        def count_sections(elf):
            return elf.header.get('e_shnum', 0)

        try:
            result = self._with_elf_file(count_sections)
            return result if result is not None else 0
        except Exception as e:
            self.log.error(f"Error counting sections: {e}")
            return 0

    def _count_segments(self):
        """Count the number of segments (program headers) in the ELF file."""
        def count_segments(elf):
            return elf.header.get('e_phnum', 0)

        try:
            result = self._with_elf_file(count_segments)
            return result if result is not None else 0
        except Exception as e:
            self.log.error(f"Error counting segments: {e}")
            return 0

    def _count_symbols(self):
        """Count the total number of symbols in symbol tables."""
        def count_symbols(elf):
            symbol_count = 0
            for section in elf.iter_sections():
                if hasattr(section, 'iter_symbols'):
                    symbol_count += section.num_symbols()
            return symbol_count

        try:
            result = self._with_elf_file(count_symbols)
            return result if result is not None else 0
        except Exception as e:
            self.log.error(f"Error counting symbols: {e}")
            return 0

    def _get_dependencies(self):
        """Get list of dynamic dependencies."""
        def get_dependencies(elf):
            dependencies = []
            dynamic_section = elf.get_section_by_name('.dynamic')
            if dynamic_section:
                for tag in dynamic_section.iter_tags():
                    if tag.entry.d_tag == 'DT_NEEDED':
                        dependencies.append(tag.needed)
            return dependencies

        try:
            result = self._with_elf_file(get_dependencies)
            return result if result is not None else []
        except Exception as e:
            self.log.error(f"Error getting dependencies: {e}")
            return []