Oladapo Oyebode

59 papers A* 1B 15C 1Journal 22Unranked 20
YearRankTypeTitle / Venue / Authors
2026 B conf
PERSUASIVE
Josteve Adekanbi, Japheth Mumo Kimeu, Gladwin Irudayaraj, Olumide Thomas Adeleke, Ibukun Okunade, Rita Orji, Oladapo Oyebode
2026 B conf
PERSUASIVE
Mausd Imran, Gerry Chan, Oladapo Oyebode, Rebecca Moyer, Rita Orji
2026 B conf
PERSUASIVE
Oladapo Oyebode, Darren Steeves, Rita Orji
2026 B conf
PERSUASIVE
Japheth Mumo Kimeu, Gladwin Irudayaraj, Josteve Adekanbi, Gloria Obuobi-Donkor, Medard Adu, Ejemai Eboreime, Grace Ataguba, Rita Orji, Oladapo Oyebode
2025 conf
AfriCHI
Grace Ataguba, Oladapo Oyebode, Bilikis Banire, Fidelia A. Orji, Gerry Chan, Sandra Meier, George Frempong, Rita Orji
2025 conf
SeGAH
Soham Sen, Oladapo Oyebode, Chinenye Ndulue, Rita Orji
2025 B conf
PERSUASIVE
Mona Alhasani, Oladapo Oyebode, Rita Orji
2025 conf
SeGAH
Aman Desai, Dharmil Shah, Oladapo Oyebode, Grace Ataguba, Rita Orji
2025 J jnl
CoRR
Gabriel Spadon, Oladapo Oyebode, Camilo M. Botero, Tushar Sharma, Floris Goerlandt, Ronald Pelot
2025 conf
AfriCHI
Grace Ataguba, Oladapo Oyebode, Gerry Chan, Fidelia A. Orji, Victoria Yemi-Peters, George Frempong, Rita Orji
2025 conf
SeGAH
Grace Ataguba, Oladapo Oyebode, Dharven Yatinkumar Doshi, Rita Orji
2025 B conf
PERSUASIVE
Kaminda Natasha Musumbulwa, Gerry Chan, Oladapo Oyebode, Rita Orji
2025 J jnl
Games Res. Pract.
Grace Ataguba, Oladapo Oyebode, Gerry Chan, Rita Orji
2025 conf
SeGAH
Grace Ataguba, Oladapo Oyebode, Fidelia A. Orji, Kosi Clinton Henry, Rita Orji
2025 B conf
PERSUASIVE
Priyal Srivastava, Gerry Chan, Oladapo Oyebode, Rita Orji
2025 conf
SeGAH
Vishesh Dipal Patel, Oladapo Oyebode, Grace Ataguba, Rita Orji
2025 J jnl
Int. J. Hum. Comput. Interact.
Gerry Chan, Bilikis Banire, Sussan Anukem, Masud Imran, Suraj Meena, Chukwuemeka Nwagu, Oladapo Oyebode, Alaa Alslaity, Ali Arya, Rita Orji
2025 B conf
PERSUASIVE
Chinenye Ndulue, Oladapo Oyebode, Rita Orji
2024 J jnl
J. Ambient Intell. Humaniz. Comput.
Hamed Jelodar, Rita Orji, Stan Matwin, Swarna Weerasinghe, Oladapo Oyebode, Yongli Wang
2024 J jnl
User Model. User Adapt. Interact.
Oladapo Oyebode, Darren Steeves, Rita Orji
2023 conf
IntelliSys (2)
Oladapo Oyebode, Ruth Ogubuike, Darlington Daniel, Rita Orji
2023 J jnl
J. Ambient Intell. Humaniz. Comput.
Hamed Jelodar, Rita Orji, Stan Matween, Swarna Weerasinghe, Oladapo Oyebode, Yongli Wang
2023 J jnl
Health Informatics J.
Oladapo Oyebode, Rita Orji
2023 J jnl
Int. J. Hum. Comput. Interact.
Oladapo Oyebode, Jonathon Fowles, Darren Steeves, Rita Orji
2023 B conf
PERSUASIVE
Oladapo Oyebode, Darren Steeves, Rita Orji
2023 J jnl
Behav. Inf. Technol.
Oladapo Oyebode, Rita Orji
2023 conf
SeGAH
Mona Alhasani, Oladapo Oyebode, Rita Orji
2022 J jnl
IEEE J. Biomed. Health Informatics
Adenrele Oduntan, Oladapo Oyebode, Amelia Hernandez Beltran, Jonathon Fowles, Darren Steeves, Rita Orji
2022 J jnl
J. Heal. Informatics Res.
Oladapo Oyebode, Chinenye Ndulue, Dinesh Mulchandani, Banuchitra Suruliraj, Ashfaq Adib, Fidelia Anulika Orji, Evangelos E. Milios, Stan Matwin, Rita Orji
2022 B conf
PERSUASIVE
Oladapo Oyebode, Felwah Alqahtani, Rita Orji
2022 J jnl
Proc. ACM Hum. Comput. Interact.
Alaa Alslaity, Banuchitra Suruliraj, Oladapo Oyebode, Jonathon Fowles, Darren Steeves, Rita Orji
2022 J jnl
User Model. User Adapt. Interact.
Chinenye Ndulue, Oladapo Oyebode, Ravishankar Subramani Iyer, Anirudh Ganesh, Syed Ishtiaque Ahmed, Rita Orji
2022 B conf
PERSUASIVE
Oladapo Oyebode, Rita Orji
2022 conf
PERSUASIVE (Adjunct)
Ifeoma Adaji, Kiemute Oyibo, Rita Orji, Jaap Ham, Oladapo Oyebode
2021 J jnl
IEEE Access
Oladapo Oyebode, Richard K. Lomotey, Rita Orji
2021 conf
SEGAH
Boma Graham-Kalio, Oladapo Oyebode, Nur Zincir-Heywood, Rita Orji
2021 J jnl
CoRR
Hamed Jelodar, Rita Orji, Stan Matwin, Swarna Weerasinghe, Oladapo Oyebode, Yongli Wang
2021 conf
ISPA/BDCloud/SocialCom/SustainCom
Oladapo Oyebode, Rita Orji
2021 conf
SEGAH
Oladapo Oyebode, Mona Alhasani, Dinesh Mulchandani, Tolulope Olagunju, Rita Orji
2021 A* conf
CHI
Oladapo Oyebode, Chinenye Ndulue, Dinesh Mulchandani, Ashfaq A. Zamil Adib, Mona Alhasani, Rita Orji
2021 C conf
CoG
Oladapo Oyebode, Anirudh Ganesh, Rita Orji
2020 conf
PERSUASIVE (Adjunct)
Oladapo Oyebode, Rita Orji
2020 conf
BCSS@PERSUASIVE
Mona Alhasani, Dinesh Mulchandani, Oladapo Oyebode, Rita Orji
2020 J jnl
J. Bank. Financial Technol.
Oladapo Oyebode, Rita Orji
2020 J jnl
CoRR
Oladapo Oyebode, Chinenye Ndulue, Dinesh Mulchandani, Banuchitra Suruliraj, Ashfaq Adib, Fidelia Anulika Orji, Evangelos E. Milios, Stan Matwin, Rita Orji
2020 conf
BCSS@PERSUASIVE
Oladapo Oyebode, Rita Orji
2020 J jnl
IEEE Access
Tolulope Olagunju, Oladapo Oyebode, Rita Orji
2020 J jnl
CoRR
Oladapo Oyebode, Chinenye Ndulue, Ashfaq Adib, Dinesh Mulchandani, Banuchitra Suruliraj, Fidelia Anulika Orji, Christine Chambers, Sandra Meier, Rita Orji
2020 B conf
PERSUASIVE
Oladapo Oyebode, Boma Graham-Kalio, Rita Orji
2020 J jnl
Frontiers Comput. Sci.
Noora Aldenaini, Oladapo Oyebode, Rita Orji, Srinivas Sampalli
2020 conf
SeGAH
Oladapo Oyebode, Devansh Maurya, Rita Orji
2020 B conf
PERSUASIVE
Chinenye Ndulue, Oladapo Oyebode, Rita Orji
2020 conf
PERSUASIVE (Adjunct)
Rita Orji, Jaap Ham, Kiemute Oyibo, Joshua C. Nwokeji, Oladapo Oyebode
2020 B conf
PERSUASIVE
Oladapo Oyebode, Chinenye Ndulue, Mona Alhasani, Rita Orji
2020 conf
PERSUASIVE (Adjunct)
Oladapo Oyebode, Rita Orji
2020 J jnl
IEEE Access
Oladapo Oyebode, Felwah Alqahtani, Rita Orji
2019 J jnl
Frontiers Artif. Intell.
Felwah Alqahtani, Ghazayil Al Khalifah, Oladapo Oyebode, Rita Orji
2019 B conf
CNSM
Oladapo Oyebode, Rita Orji
2018 conf
AfriCHI
Oladapo Oyebode, Rita Orji
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"