Raghu Meka

173 papers A* 56A 8Journal 100Unranked 8
YearRankTypeTitle / Venue / Authors
2026 A conf
ITCS
Alexandros Hollender, Pasin Manurangsi, Raghu Meka, Warut Suksompong
2026 A* conf
SODA
Arpon Basu, Pravesh K. Kothari, Yang P. Liu, Raghu Meka
2026 conf
SOSA
Pasin Manurangsi, Raghu Meka
2025 A ed.
ITCS
Raghu Meka
2025 J jnl
CoRR
Alexandros Hollender, Pasin Manurangsi, Raghu Meka, Warut Suksompong
2025 J jnl
CoRR
Yiwen Kou, Raghu Meka
2025 J jnl
CoRR
Gautam Chandrasekaran, Raghu Meka, Konstantinos Stavropoulos
2025 J jnl
CoRR
Arpon Basu, Pravesh K. Kothari, Yang P. Liu, Raghu Meka
2025 J jnl
CoRR
Parikshit Gopalan, Raghu Meka, Prasad Raghavendra, Mihir Singhal, Avi Wigderson
2025 J jnl
CoRR
Pasin Manurangsi, Raghu Meka
2024 A* conf
STOC
Zander Kelley, Shachar Lovett, Raghu Meka
2024 A* conf
COLT
Jonathan A. Kelner, Frederic Koehler, Raghu Meka, Dhruv Rohatgi
2024 J jnl
CoRR
Jonathan A. Kelner, Frederic Koehler, Raghu Meka, Dhruv Rohatgi
2024 A* conf
COLT
Pranjal Awasthi, Nishanth Dikkala, Pritish Kamath, Raghu Meka
2024 J jnl
CoRR
Pranjal Awasthi, Nishanth Dikkala, Pritish Kamath, Raghu Meka
2024 A* conf
STOC
Amir Abboud, Nick Fischer, Zander Kelley, Shachar Lovett, Raghu Meka
2024 A* conf
COLT
Badih Ghazi, Pritish Kamath, Ravi Kumar, Pasin Manurangsi, Raghu Meka, Chiyuan Zhang
2024 J jnl
CoRR
Badih Ghazi, Pritish Kamath, Ravi Kumar, Pasin Manurangsi, Raghu Meka, Chiyuan Zhang
2024 A* conf
COLT
Gautam Chandrasekaran, Adam R. Klivans, Vasilis Kontonis, Raghu Meka, Konstantinos Stavropoulos
2024 J jnl
CoRR
Gautam Chandrasekaran, Adam R. Klivans, Vasilis Kontonis, Raghu Meka, Konstantinos Stavropoulos
2023 A* conf
SODA
Peter Ivanov, Raghu Meka, Emanuele Viola
2023 J jnl
CoRR
Zander Kelley, Shachar Lovett, Raghu Meka
2023 J jnl
Electron. Colloquium Comput. Complex.
Zander Kelley, Shachar Lovett, Raghu Meka
2023 A* conf
NeurIPS
Jonathan A. Kelner, Frederic Koehler, Raghu Meka, Dhruv Rohatgi
2023 J jnl
CoRR
Jonathan A. Kelner, Frederic Koehler, Raghu Meka, Dhruv Rohatgi
2023 A* conf
COLT
Sitan Chen, Zehao Dou, Surbhi Goel, Adam R. Klivans, Raghu Meka
2023 J jnl
CoRR
Sitan Chen, Zehao Dou, Surbhi Goel, Adam R. Klivans, Raghu Meka
2023 J jnl
CoRR
Amir Abboud, Nick Fischer, Zander Kelley, Shachar Lovett, Raghu Meka
2023 J jnl
Electron. Colloquium Comput. Complex.
Amir Abboud, Nick Fischer, Zander Kelley, Shachar Lovett, Raghu Meka
2023 A* conf
ICML
Badih Ghazi, Pritish Kamath, Ravi Kumar, Pasin Manurangsi, Raghu Meka, Chiyuan Zhang
2023 J jnl
CoRR
Badih Ghazi, Pritish Kamath, Ravi Kumar, Raghu Meka, Pasin Manurangsi, Chiyuan Zhang
2023 A* conf
EMNLP
Nishanth Dikkala, Nikhil Ghosh, Raghu Meka, Rina Panigrahy, Nikhil Vyas, Xin Wang
2023 A* conf
STOC
Nikhil Bansal, Haotian Jiang, Raghu Meka
2023 J jnl
CoRR
Yuanzhi Li, Raghu Meka, Rina Panigrahy, Kulin Shah
2023 J jnl
Theory Comput.
Jaroslaw Byrka, Raghu Meka
2023 A* conf
FOCS
Zander Kelley, Raghu Meka
2023 A* conf
NeurIPS
Badih Ghazi, Pritish Kamath, Ravi Kumar, Pasin Manurangsi, Raghu Meka, Chiyuan Zhang
2023 J jnl
CoRR
Badih Ghazi, Pritish Kamath, Ravi Kumar, Pasin Manurangsi, Raghu Meka, Chiyuan Zhang
2022 J jnl
SIAM J. Comput.
Pravesh K. Kothari, Raghu Meka, Prasad Raghavendra
2022 J jnl
CoRR
Jonathan A. Kelner, Frederic Koehler, Raghu Meka, Dhruv Rohatgi
2022 J jnl
Electron. Colloquium Comput. Complex.
Peter Ivanov, Raghu Meka, Emanuele Viola
2022 A* conf
NeurIPS
Sitan Chen, Aravind Gollakota, Adam R. Klivans, Raghu Meka
2022 J jnl
CoRR
Sitan Chen, Aravind Gollakota, Adam R. Klivans, Raghu Meka
2022 A conf
ITCS
Shachar Lovett, Raghu Meka, Ian Mertz, Toniann Pitassi, Jiapeng Zhang
2022 A* conf
NeurIPS
Jonathan A. Kelner, Frederic Koehler, Raghu Meka, Dhruv Rohatgi
2022 A* conf
ICLR
Sitan Chen, Jerry Li, Yuanzhi Li, Raghu Meka
2022 J jnl
CoRR
Sitan Chen, Jerry Li, Yuanzhi Li, Raghu Meka
2022 A conf
ITCS
Nikhil Bansal, Haotian Jiang, Raghu Meka, Sahil Singla, Makrand Sinha
2022 A conf
CCC
Zander Kelley, Raghu Meka
2022 J jnl
CoRR
Nikhil Bansal, Haotian Jiang, Raghu Meka
2022 A* conf
NeurIPS
Nishanth Dikkala, Sankeerth Rao Karingula, Raghu Meka, Jelani Nelson, Rina Panigrahy, Xin Wang
2022 A* conf
ICALP
Nikhil Bansal, Haotian Jiang, Raghu Meka, Sahil Singla, Makrand Sinha
2022 J jnl
CoRR
Nikhil Bansal, Haotian Jiang, Raghu Meka, Sahil Singla, Makrand Sinha
2021 J jnl
CoRR
Sitan Chen, Adam R. Klivans, Raghu Meka
2021 A* conf
NeurIPS
Sitan Chen, Adam R. Klivans, Raghu Meka
2021 A* conf
FOCS
Sitan Chen, Adam R. Klivans, Raghu Meka
2021 J jnl
Electron. Colloquium Comput. Complex.
Dean Doron, Raghu Meka, Omer Reingold, Avishay Tal, Salil P. Vadhan
2021 A* conf
FOCS
Jonathan A. Kelner, Frederic Koehler, Raghu Meka, Dhruv Rohatgi
2021 J jnl
CoRR
Jonathan A. Kelner, Frederic Koehler, Raghu Meka, Dhruv Rohatgi
2021 A* conf
SODA
Nikhil Bansal, Haotian Jiang, Raghu Meka, Sahil Singla, Makrand Sinha
2021 J jnl
CoRR
Nikhil Bansal, Haotian Jiang, Raghu Meka, Sahil Singla, Makrand Sinha
2021 conf
APPROX-RANDOM
Dean Doron, Raghu Meka, Omer Reingold, Avishay Tal, Salil P. Vadhan
2021 J jnl
CoRR
Zander Kelley, Raghu Meka
2021 J jnl
Electron. Colloquium Comput. Complex.
Zander Kelley, Raghu Meka
2020 ed.
APPROX-RANDOM
Jaroslaw Byrka, Raghu Meka
2020 A* conf
COLT
Paxton Turner, Raghu Meka, Philippe Rigollet
2020 J jnl
Electron. Colloquium Comput. Complex.
Ashutosh Kumar, Raghu Meka, David Zuckerman
2020 J jnl
IACR Cryptol. ePrint Arch.
Ashutosh Kumar, Raghu Meka, David Zuckerman
2020 A* conf
FOCS
Eshan Chattopadhyay, Jesse Goodman, Vipul Goyal, Ashutosh Kumar, Xin Li, Raghu Meka, David Zuckerman
2020 J jnl
Electron. Colloquium Comput. Complex.
Shachar Lovett, Raghu Meka, Jiapeng Zhang
2020 J jnl
CoRR
Sitan Chen, Adam R. Klivans, Raghu Meka
2020 A* conf
COLT
Sitan Chen, Raghu Meka
2020 J jnl
CoRR
Sitan Chen, Raghu Meka
2020 A* conf
NeurIPS
Jonathan A. Kelner, Frederic Koehler, Raghu Meka, Ankur Moitra
2020 J jnl
Random Struct. Algorithms
Nikhil Bansal, Raghu Meka
2020 J jnl
CoRR
Nikhil Bansal, Haotian Jiang, Raghu Meka, Sahil Singla, Makrand Sinha
2019 J jnl
Electron. Colloquium Comput. Complex.
Arnab Bhattacharyya, Philips George John, Suprovat Ghoshal, Raghu Meka
2019 J jnl
CoRR
Raghu Meka, Philippe Rigollet, Paxton Turner
2019 A* conf
FOCS
Ashutosh Kumar, Raghu Meka, Amit Sahai
2019 J jnl
CoRR
Jonathan A. Kelner, Frederic Koehler, Raghu Meka, Ankur Moitra
2019 A* conf
SODA
Nikhil Bansal, Raghu Meka
2019 A* conf
STOC
Raghu Meka, Omer Reingold, Avishay Tal
2019 J jnl
J. ACM
Russell Impagliazzo, Raghu Meka, David Zuckerman
2018 A* conf
COLT
Adam R. Klivans, Pravesh K. Kothari, Raghu Meka
2018 J jnl
CoRR
Adam R. Klivans, Pravesh K. Kothari, Raghu Meka
2018 J jnl
Electron. Colloquium Comput. Complex.
Ashutosh Kumar, Raghu Meka, Amit Sahai
2018 J jnl
IACR Cryptol. ePrint Arch.
Ashutosh Kumar, Raghu Meka, Amit Sahai
2018 A* conf
ICML
Surbhi Goel, Adam R. Klivans, Raghu Meka
2018 J jnl
CoRR
Surbhi Goel, Adam R. Klivans, Raghu Meka
2018 J jnl
CoRR
Nikhil Bansal, Raghu Meka
2018 J jnl
CoRR
Raghu Meka, Omer Reingold, Avishay Tal
2018 J jnl
Electron. Colloquium Comput. Complex.
Raghu Meka, Omer Reingold, Avishay Tal
2018 J jnl
SIAM J. Comput.
Parikshit Gopalan, Daniel M. Kane, Raghu Meka
2017 A* conf
STOC
Pravesh K. Kothari, Raghu Meka, Prasad Raghavendra
2017 J jnl
IEEE Trans. Inf. Theory
Clément L. Canonne, Venkatesan Guruswami, Raghu Meka, Madhu Sudan
2017 A* conf
SODA
Raghu Meka
2017 A* conf
FOCS
Adam R. Klivans, Raghu Meka
2017 J jnl
CoRR
Adam R. Klivans, Raghu Meka
2016 J jnl
Theory Comput.
Raghu Meka, Oanh Nguyen, Van Vu
2016 J jnl
CoRR
Pravesh Kothari, Raghu Meka, Prasad Raghavendra
2016 J jnl
SIAM J. Comput.
Mika Göös, Shachar Lovett, Raghu Meka, Thomas Watson, David Zuckerman
2016 J jnl
SIAM J. Comput.
Moritz Hardt, Yuval Ishai, Raghu Meka, Virginia Vassilevska Williams
2015 A* conf
STOC
Pravesh K. Kothari, Raghu Meka
2015 A conf
ITCS
Clément Louis Canonne, Venkatesan Guruswami, Raghu Meka, Madhu Sudan
2015 J jnl
SIAM J. Comput.
Shachar Lovett, Raghu Meka
2015 J jnl
CoRR
Raghu Meka
2015 J jnl
Electron. Colloquium Comput. Complex.
Raghu Meka
2015 J jnl
SIAM J. Comput.
Boaz Barak, Parikshit Gopalan, Johan Håstad, Raghu Meka, Prasad Raghavendra, David Steurer
2015 A* conf
FOCS
Parikshit Gopalan, Daniel M. Kane, Raghu Meka
2015 J jnl
CoRR
Parikshit Gopalan, Daniel M. Kane, Raghu Meka
2015 A* conf
STOC
Mika Göös, Shachar Lovett, Raghu Meka, Thomas Watson, David Zuckerman
2015 A* conf
STOC
Raghu Meka, Aaron Potechin, Avi Wigderson
2015 J jnl
CoRR
Raghu Meka, Aaron Potechin, Avi Wigderson
2014 J jnl
CoRR
Pravesh Kothari, Raghu Meka
2014 J jnl
Theory Comput.
Prahladh Harsha, Adam R. Klivans, Raghu Meka
2014 J jnl
CoRR
Clément L. Canonne, Venkatesan Guruswami, Raghu Meka, Madhu Sudan
2014 J jnl
Electron. Colloquium Comput. Complex.
Clément L. Canonne, Venkatesan Guruswami, Raghu Meka, Madhu Sudan
2014 A* conf
COLT
Moritz Hardt, Raghu Meka, Prasad Raghavendra, Benjamin Weitz
2014 J jnl
CoRR
Moritz Hardt, Raghu Meka, Prasad Raghavendra, Benjamin Weitz
2014 conf
APPROX-RANDOM
Raghu Meka, Omer Reingold, Yuan Zhou
2014 conf
ICALP (1)
Raghu Meka, Omer Reingold, Guy N. Rothblum, Ron D. Rothblum
2014 J jnl
CoRR
Parikshit Gopalan, Daniel M. Kane, Raghu Meka
2014 J jnl
Electron. Colloquium Comput. Complex.
Mika Göös, Shachar Lovett, Raghu Meka, Thomas Watson, David Zuckerman
2014 A* conf
COLT
Elad Hazan, Zohar Shay Karnin, Raghu Meka
2013 A* conf
STOC
Daniel M. Kane, Raghu Meka
2013 J jnl
Electron. Colloquium Comput. Complex.
Raghu Meka, Avi Wigderson
2013 J jnl
Comput. Complex.
Parikshit Gopalan, Raghu Meka, Omer Reingold
2013 A* conf
COLT
Daniel M. Kane, Adam R. Klivans, Raghu Meka
2013 J jnl
CoRR
Adam R. Klivans, Raghu Meka
2013 J jnl
Electron. Colloquium Comput. Complex.
Adam R. Klivans, Raghu Meka
2013 J jnl
SIAM J. Comput.
Parikshit Gopalan, Raghu Meka, Omer Reingold, David Zuckerman
2013 J jnl
SIAM J. Comput.
Raghu Meka, David Zuckerman
2013 J jnl
CoRR
Elad Hazan, Zohar Shay Karnin, Raghu Meka
2012 J jnl
CoRR
Daniel M. Kane, Raghu Meka
2012 J jnl
CoRR
Raghu Meka
2012 A* conf
FOCS
Raghu Meka
2012 J jnl
J. ACM
Prahladh Harsha, Adam R. Klivans, Raghu Meka
2012 J jnl
CoRR
Parikshit Gopalan, Raghu Meka, Omer Reingold, Luca Trevisan, Salil P. Vadhan
2012 A* conf
FOCS
Parikshit Gopalan, Raghu Meka, Omer Reingold, Luca Trevisan, Salil P. Vadhan
2012 J jnl
Electron. Colloquium Comput. Complex.
Parikshit Gopalan, Raghu Meka, Omer Reingold, Luca Trevisan, Salil P. Vadhan
2012 J jnl
CoRR
Shachar Lovett, Raghu Meka
2012 A* conf
FOCS
Shachar Lovett, Raghu Meka
2012 J jnl
CoRR
Parikshit Gopalan, Raghu Meka, Omer Reingold
2012 A conf
CCC
Parikshit Gopalan, Raghu Meka, Omer Reingold
2012 J jnl
Electron. Colloquium Comput. Complex.
Parikshit Gopalan, Raghu Meka, Omer Reingold
2012 A* conf
COLT
Parikshit Gopalan, Adam R. Klivans, Raghu Meka
2012 A* conf
FOCS
Boaz Barak, Parikshit Gopalan, Johan Håstad, Raghu Meka, Prasad Raghavendra, David Steurer
2012 A* conf
FOCS
Russell Impagliazzo, Raghu Meka, David Zuckerman
2012 J jnl
Electron. Colloquium Comput. Complex.
Russell Impagliazzo, Raghu Meka, David Zuckerman
2011 conf
APPROX-RANDOM
Daniel Kane, Raghu Meka, Jelani Nelson
2011 A* conf
FOCS
Parikshit Gopalan, Adam R. Klivans, Raghu Meka, Daniel Stefankovic, Santosh S. Vempala, Eric Vigoda
2011 J jnl
CoRR
Boaz Barak, Parikshit Gopalan, Johan Håstad, Raghu Meka, Prasad Raghavendra, David Steurer
2011 J jnl
Electron. Colloquium Comput. Complex.
Boaz Barak, Parikshit Gopalan, Johan Håstad, Raghu Meka, Prasad Raghavendra, David Steurer
2011 A* conf
STOC
Parikshit Gopalan, Raghu Meka, Omer Reingold, David Zuckerman
2010 J jnl
CoRR
Raghu Meka
2010 J jnl
Electron. Colloquium Comput. Complex.
Daniel Kane, Raghu Meka, Jelani Nelson
2010 A* conf
STOC
Prahladh Harsha, Adam R. Klivans, Raghu Meka
2010 A* conf
STOC
Ilias Diakonikolas, Prahladh Harsha, Adam R. Klivans, Raghu Meka, Prasad Raghavendra, Rocco A. Servedio, Li-Yang Tan
2010 conf
NIPS
Prateek Jain, Raghu Meka, Inderjit S. Dhillon
2010 J jnl
CoRR
Parikshit Gopalan, Adam R. Klivans, Raghu Meka
2010 J jnl
Electron. Colloquium Comput. Complex.
Parikshit Gopalan, Adam R. Klivans, Raghu Meka
2010 J jnl
Electron. Colloquium Comput. Complex.
Parikshit Gopalan, Raghu Meka, Omer Reingold, David Zuckerman
2010 A* conf
STOC
Raghu Meka, David Zuckerman
2009 J jnl
CoRR
Prahladh Harsha, Adam R. Klivans, Raghu Meka
2009 J jnl
Electron. Colloquium Comput. Complex.
Prahladh Harsha, Adam R. Klivans, Raghu Meka
2009 J jnl
CoRR
Prahladh Harsha, Adam R. Klivans, Raghu Meka
2009 J jnl
CoRR
Raghu Meka, Prateek Jain, Inderjit S. Dhillon
2009 conf
NIPS
Raghu Meka, Prateek Jain, Inderjit S. Dhillon
2009 J jnl
CoRR
Raghu Meka, David Zuckerman
2009 conf
APPROX-RANDOM
Raghu Meka, David Zuckerman
2008 A* conf
ICML
Raghu Meka, Prateek Jain, Constantine Caramanis, Inderjit S. Dhillon
2008 A conf
SDM
Prateek Jain, Raghu Meka, Inderjit S. Dhillon
2008 J jnl
Stat. Anal. Data Min.
Prateek Jain, Raghu Meka, Inderjit S. Dhillon
redb/extractors/decompiler/apk/smali_parser.py
← Index redb/extractors/decompiler/apk/smali_parser.py python
"""Smali file parser — extracts individual method bodies from apktool output.

Parses .smali files produced by apktool and extracts per-method bodies,
instruction counts, and register counts.
"""

import os
import re
from dataclasses import dataclass, field
from typing import Dict, List, Optional


@dataclass
class SmaliMethod:
    """Parsed smali method data."""
    class_name: str
    method_name: str
    method_signature: str
    body: str
    instruction_count: int = 0
    register_count: int = 0
    access_flags: List[str] = field(default_factory=list)


# Directives start with '.' — these are metadata, not instructions
_DIRECTIVE_RE = re.compile(r"^\s*\.")
# Labels start with ':'
_LABEL_RE = re.compile(r"^\s*:")
# Blank or comment lines
_BLANK_OR_COMMENT_RE = re.compile(r"^\s*(#.*)?$")
# Method declaration
_METHOD_START_RE = re.compile(
    r"^\.method\s+(.*?)\s+(\S+)\(([^)]*)\)(\S+)\s*$"
)
_METHOD_START_SIMPLE_RE = re.compile(
    r"^\.method\s+(.*)"
)
# .registers or .locals directive
_REGISTERS_RE = re.compile(r"^\s*\.registers\s+(\d+)")
_LOCALS_RE = re.compile(r"^\s*\.locals\s+(\d+)")
# .line directive
_LINE_RE = re.compile(r"^\s*\.line\s+\d+")


class SmaliParser:
    """Parser for apktool smali output files."""

    @staticmethod
    def parse_smali_file(filepath: str) -> List[SmaliMethod]:
        """Parse a single .smali file and return list of methods.

        Each .smali file contains one class with all its methods.
        """
        with open(filepath, "r", encoding="utf-8", errors="replace") as f:
            content = f.read()

        return SmaliParser._parse_smali_content(content, filepath)

    @staticmethod
    def _parse_smali_content(content: str, source: str = "") -> List[SmaliMethod]:
        """Parse smali text content and extract methods."""
        lines = content.split("\n")
        methods = []

        # Extract class name from .class directive
        class_name = ""
        for line in lines:
            if line.startswith(".class "):
                parts = line.split()
                class_name = parts[-1]  # Last token is the class descriptor
                break

        in_method = False
        method_lines = []
        method_header = ""
        access_flags = []
        skip_method = False

        for line in lines:
            if line.startswith(".method "):
                in_method = True
                method_lines = []
                method_header = line
                skip_method = False

                # Parse access flags and method signature
                remainder = line[len(".method "):].strip()
                tokens = remainder.split()
                access_flags = []
                method_sig_token = tokens[-1] if tokens else ""

                for t in tokens[:-1]:
                    access_flags.append(t)

                # Skip abstract and native methods (no body)
                if "abstract" in access_flags or "native" in access_flags:
                    skip_method = True

            elif line.startswith(".end method"):
                if in_method and not skip_method:
                    body = "\n".join(method_lines)
                    method_name, signature = SmaliParser._parse_method_sig(
                        method_header
                    )
                    instruction_count = SmaliParser.count_instructions(body)
                    register_count = SmaliParser._extract_register_count(body)

                    methods.append(
                        SmaliMethod(
                            class_name=class_name,
                            method_name=method_name,
                            method_signature=signature,
                            body=body,
                            instruction_count=instruction_count,
                            register_count=register_count,
                            access_flags=access_flags,
                        )
                    )
                in_method = False
                method_lines = []
                access_flags = []

            elif in_method and not skip_method:
                method_lines.append(line)

        return methods

    @staticmethod
    def parse_smali_directory(dirpath: str) -> Dict[str, SmaliMethod]:
        """Parse all .smali files in a directory tree.

        Returns dict keyed by 'ClassName->methodName(signature)ReturnType'.
        """
        result = {}
        for root, _dirs, files in os.walk(dirpath):
            for fname in files:
                if fname.endswith(".smali"):
                    fpath = os.path.join(root, fname)
                    try:
                        methods = SmaliParser.parse_smali_file(fpath)
                        for m in methods:
                            key = SmaliParser.make_method_key(
                                m.class_name, m.method_name, m.method_signature
                            )
                            result[key] = m
                    except Exception:
                        continue
        return result

    @staticmethod
    def normalize_smali_body(body: str) -> str:
        """Normalize smali body for consistent hashing.

        Strips comments, .line directives, normalizes whitespace.
        """
        lines = []
        for line in body.split("\n"):
            stripped = line.strip()
            # Skip empty lines, comments, and .line directives
            if not stripped or stripped.startswith("#"):
                continue
            if _LINE_RE.match(stripped):
                continue
            lines.append(stripped)
        return "\n".join(lines)

    @staticmethod
    def count_instructions(body: str) -> int:
        """Count actual Dalvik instructions (skip directives, labels, blanks)."""
        count = 0
        for line in body.split("\n"):
            stripped = line.strip()
            if not stripped:
                continue
            if _DIRECTIVE_RE.match(stripped):
                continue
            if _LABEL_RE.match(stripped):
                continue
            if _BLANK_OR_COMMENT_RE.match(stripped):
                continue
            count += 1
        return count

    @staticmethod
    def _extract_register_count(body: str) -> int:
        """Extract register count from .registers or .locals directive.

        apktool outputs .locals (local registers only) by default.
        .registers (total = locals + params) is used with --use-registers.
        We return whichever is present.
        """
        for line in body.split("\n"):
            stripped = line.strip()
            m = _REGISTERS_RE.match(stripped)
            if m:
                return int(m.group(1))
            m = _LOCALS_RE.match(stripped)
            if m:
                return int(m.group(1))
        return 0

    @staticmethod
    def _parse_method_sig(header_line: str) -> tuple:
        """Parse method name and signature from .method header line.

        Input: '.method public onCreate(Landroid/os/Bundle;)V'
        Returns: ('onCreate', '(Landroid/os/Bundle;)V')
        """
        remainder = header_line[len(".method "):].strip()
        tokens = remainder.split()
        if not tokens:
            return ("unknown", "()")

        # Last token contains methodName(params)returnType
        method_part = tokens[-1]

        paren_idx = method_part.find("(")
        if paren_idx == -1:
            return (method_part, "()")

        method_name = method_part[:paren_idx]
        signature = method_part[paren_idx:]

        return (method_name, signature)

    @staticmethod
    def make_method_key(class_name: str, method_name: str, signature: str) -> str:
        """Build a canonical method key for cross-tool matching.

        Format: 'Lcom/example/Foo;->methodName(params)ReturnType'
        """
        return f"{class_name}->{method_name}{signature}"