Hadi Beik-Mohammadi

18 papers A* 2B 2Misc 1Journal 11Unranked 2
YearRankTypeTitle / Venue / Authors
2026 J jnl
Int. J. Robotics Res.
Hadi Beik-Mohammadi, Søren Hauberg, Georgios Arvanitidis, Gerhard Neumann, Leonel Rozo
2024 J jnl
CoRR
Hadi Beik-Mohammadi, Søren Hauberg, Georgios Arvanitidis, Gerhard Neumann, Leonel Rozo
2024 A* conf
ICLR
Hadi Beik-Mohammadi, Søren Hauberg, Georgios Arvanitidis, Nadia Figueroa, Gerhard Neumann, Leonel Rozo
2024 J jnl
CoRR
Hadi Beik-Mohammadi, Søren Hauberg, Georgios Arvanitidis, Nadia Figueroa, Gerhard Neumann, Leonel Rozo
2023 J jnl
Int. J. Robotics Res.
Hadi Beik-Mohammadi, Søren Hauberg, Georgios Arvanitidis, Gerhard Neumann, Leonel Rozo
2022 Misc conf
CoRL
Jiechao Zhang, Hadi Beik-Mohammadi, Leonel Rozo
2022 J jnl
CoRR
Jiechao Zhang, Hadi Beik-Mohammadi, Leonel Dario Rozo
2022 J jnl
CoRR
Hadi Beik-Mohammadi, Søren Hauberg, Georgios Arvanitidis, Gerhard Neumann, Leonel Dario Rozo
2021 J jnl
Frontiers Robotics AI
Neal Y. Lii, Aaron Pereira, Julian Dietl, Georg Stillfried, Annika Schmidt, Hadi Beik-Mohammadi, Thomas Baker, Annika Maier, Benedikt Pleintinger, Zhaopeng Chen, Amal Elawad, Lauren Mentzer, Austin Pineault, Philipp Reisich, Alin Albu-Schäffer
2021 conf
Robotics: Science and Systems
Hadi Beik-Mohammadi, Søren Hauberg, Georgios Arvanitidis, Gerhard Neumann, Leonel Dario Rozo
2021 J jnl
CoRR
Hadi Beik-Mohammadi, Søren Hauberg, Georgios Arvanitidis, Gerhard Neumann, Leonel Dario Rozo
2021 J jnl
CoRR
Hadi Beik-Mohammadi, Matthias Kerzel, Benedikt Pleintinger, Thomas Hulin, Philipp Reisich, Annika Schmidt, Aaron Pereira, Stefan Wermter, Neal Y. Lii
2020 B conf
RO-MAN
Hadi Beik-Mohammadi, Matthias Kerzel, Benedikt Pleintinger, Thomas Hulin, Philipp Reisich, Annika Schmidt, Aaron Pereira, Stefan Wermter, Neal Y. Lii
2019 A* conf
ICRA
Hadi Beik-Mohammadi, Nikoletta Xirakia, Fares Abawi, Irina Barykina, Krishnan Chandran, Gitanjali Nair, Cuong Nguyen, Daniel Speck, Tayfun Alpay, Sascha S. Griffiths, Stefan Heinrich, Erik Strahl, Cornelius Weber, Stefan Wermter
2019 conf
ICANN (1)
Hadi Beik-Mohammadi, Mohammad-Ali Zamani, Matthias Kerzel, Stefan Wermter
2018 B conf
IJCNN
Matthias Kerzel, Hadi Beik-Mohammadi, Mohammad-Ali Zamani, Stefan Wermter
2016 J jnl
Int. J. Uncertain. Fuzziness Knowl. Based Syst.
A. Sheikhlar, Ahmad Fakharian, Hadi Beik-Mohammadi, Aras Adhami-Mirhosseini
2016 J jnl
Ind. Robot
Mostafa Mahmoodi, Khalil Alipour, Hadi Beik-Mohammadi
redb/extractors/decompiler/apk/library_filter.py
← Index redb/extractors/decompiler/apk/library_filter.py python
"""Package-based library filtering for APK DEX code analysis.

Determines whether a method belongs to a known library/framework package
and should be filtered out of content tables. This is the Android equivalent
of is_lib_or_thunk() in the Binary Ninja pipeline.
"""

import os
from typing import Dict, List


DEFAULT_LIBRARY_PREFIXES = [
    "android.",
    "androidx.",
    "com.google.android.",
    "com.google.firebase.",
    "com.google.gson.",
    "com.google.protobuf.",
    "kotlin.",
    "kotlinx.",
    "org.apache.",
    "com.squareup.",
    "io.reactivex.",
    "org.reactivestreams.",
    "com.facebook.",
    "com.crashlytics.",
    "io.fabric.",
    "org.junit.",
    "org.mockito.",
]


class LibraryFilter:
    """Filters library/framework classes from APK analysis."""

    def __init__(self, prefixes: List[str] = None):
        env_prefixes = os.getenv("APK_LIBRARY_PREFIXES")
        if env_prefixes:
            self._prefixes = [p.strip() for p in env_prefixes.split(",") if p.strip()]
        elif prefixes is not None:
            self._prefixes = prefixes
        else:
            self._prefixes = DEFAULT_LIBRARY_PREFIXES

        # Convert Dalvik-style prefixes to both formats for matching
        self._dot_prefixes = tuple(self._prefixes)

        self._stats = {"library": 0, "user": 0}

    def is_library(self, class_name: str) -> bool:
        """Check if a class belongs to a known library/framework package.

        Accepts both Java dot notation (com.example.Foo) and Dalvik
        descriptor notation (Lcom/example/Foo;).
        """
        # Normalize Dalvik descriptor to dot notation
        normalized = self._normalize_class_name(class_name)

        is_lib = normalized.startswith(self._dot_prefixes)
        if is_lib:
            self._stats["library"] += 1
        else:
            self._stats["user"] += 1
        return is_lib

    def get_filter_stats(self) -> Dict[str, int]:
        """Return counts of filtered vs. retained classes."""
        return dict(self._stats)

    @staticmethod
    def _normalize_class_name(class_name: str) -> str:
        """Convert Dalvik descriptor to dot notation.

        Lcom/example/Foo; -> com.example.Foo
        com.example.Foo -> com.example.Foo
        """
        if class_name.startswith("L") and class_name.endswith(";"):
            return class_name[1:-1].replace("/", ".")
        return class_name.replace("/", ".")