Ian M. Leslie

26 papers A* 7B 3Misc 1Journal 9Unranked 6
YearRankTypeTitle / Venue / Authors
2015 Misc conf
NSDI
Anil Madhavapeddy, Thomas Leonard, Magnus Skjegstad, Thomas Gazagnaire, David Sheets, David J. Scott, Richard Mortier, Amir Chaudhry, Balraj Singh, Jon Ludlam, Jon Crowcroft, Ian M. Leslie
2012 conf
MPM@EuroSys
Chris Elsmore, Anil Madhavapeddy, Ian M. Leslie, Amir Chaudhry
2003 conf
MoMeTools@SIGCOMM
James Hall, Andrew Moore, Ian Pratt, Ian M. Leslie
2001 B conf
LCN
James Hall, Ian Pratt, Ian M. Leslie
1998 A* conf
INFOCOM
James Hall, Roberto Sabatino, Simon Crosby, Ian M. Leslie, Richard Black
1998 J jnl
Comput. Commun.
John T. Lewis, Raymond Russell, Fergal Toomey, Brian McGurk, Simon Crosby, Ian M. Leslie
1998 J jnl
IEEE J. Sel. Areas Commun.
Jacobus E. van der Merwe, Ian M. Leslie
1998 J jnl
IEEE Commun. Mag.
Sean Rooney, Jacobus E. van der Merwe, Simon Crosby, Ian M. Leslie
1998 conf
Broadband European Networks and Multimedia Services
Ian M. Leslie
1997 B conf
LCN
James Hall, Roberto Sabatino, Simon Crosby, Ian M. Leslie, Richard Black
1997 conf
Integrated Network Management
Jacobus E. van der Merwe, Ian M. Leslie
1996 J jnl
Perform. Evaluation
Nils Björkman, Alexander Latour-Henner, Aziz Miah, Simon Crosby, Ian M. Leslie, M. Davey, Raymond Russell, Fergal Toomey
1996 J jnl
IEEE J. Sel. Areas Commun.
Ian M. Leslie, Derek McAuley, Richard Black, Timothy Roscoe, Paul Barham, David Martin Evers, Robin Fairbairns, Eoin Hyden
1995 B conf
ICECCS
Paul Curzon, Ian M. Leslie
1994 A* conf
SIGCOMM
Richard Black, Ian M. Leslie, Derek McAuley
1994 conf
USENIX Summer
Sape J. Mullender, Ian M. Leslie, Derek McAuley
1993 J jnl
IEEE Netw.
Ian M. Leslie, Derek McAuley, David L. Tennenhouse
1993 A* conf
INFOCOM
Matthew Doar, Ian M. Leslie
1993 J jnl
ACM SIGOPS Oper. Syst. Rev.
Ian M. Leslie, Derek McAuley, Sape J. Mullender
1992 A* conf
INFOCOM
Xiaoqiang Chen, Ian M. Leslie
1991 A* conf
SIGCOMM
Ian M. Leslie, Derek McAuley
1989 A* conf
SIGCOMM
David L. Tennenhouse, Ian M. Leslie
1989 conf
Process in Distributed Operating Systems and Distributed Systems Management
Jean Bacon, Ian M. Leslie, Roger M. Needham
1989 A* conf
SIGCOMM
B. R. Harita, Ian M. Leslie
1984 J jnl
Comput. Commun. Rev.
Ian M. Leslie, Roger M. Needham, John W. Burren, Graham C. Adams
1984 J jnl
Comput. Commun. Rev.
A. Gill Waters, Christopher J. Adams, Ian M. Leslie, Roger M. Needham
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("/", ".")