Vandana P. Janeja

87 papers A* 1A 2B 3C 9Misc 3Journal 38Unranked 27
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Alabi Ahmed, Vandana P. Janeja, Sanjay Purushotham
2026 J jnl
CoRR
Akila Sampath, Vandana P. Janeja, Jianwu Wang
2026 J jnl
CoRR
Akila Sampath, Vandana P. Janeja, Jianwu Wang
2025 J jnl
Trans. GIS
Saydeh N. Karabatis, Vandana P. Janeja, Zhiyuan Chen
2025 A* conf
ICDM
Tolulope Ale, Nicole-Jeanne Schlegel, Vandana P. Janeja
2025 J jnl
CoRR
Tolulope Ale, Nicole-Jeanne Schlegel, Vandana P. Janeja
2025 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Chhaya Kulkarni, Bayu Adhi Tama, Nicole-Jeanne Schlegel, Vandana P. Janeja
2025 J jnl
CoRR
Francis Ndikum Nji, Vandana P. Janeja, Jianwu Wang
2025 J jnl
CoRR
Francis Ndikum Nji, Vandana P. Janeja, Jianwu Wang
2025 A conf
SDM
Zahra Khanjani, Vandana P. Janeja, Christine Mallinson, Sanjay Purushotham
2025 J jnl
CoRR
Elizabeth G. Campolongo, Yuan-Tang Chou, Ekaterina Govorkova, Wahid Bhimji, Wei-Lun Chao, Chris Harris, Shih-Chieh Hsu, Hilmar Lapp, Mark S. Neubauer, Josephine M. Namayanja, Aneesh Subramanian, Philip C. Harris, Advaith Anand, David Edward Carlyn, Subhankar Ghosh, Christopher G. Lawrence, Eric A. Moreno, Ryan Raikman, Jiaman Wu, Ziheng Zhang, Bayu Adhi, Mohammad Ahmadi Gharehtoragh, Saúl Alonso-Monsalve, Marta Babicz, Furqan Baig, Namrata Banerji, William Bardon, Tyler Barna, Tanya Y. Berger-Wolf, Adji Bousso Dieng, Micah Brachman, Quentin Buat, David C. Y. Hui, Phuong Cao, Franco Cerino, Yi-Chun Chang, Shivaji Chaulagain, An-Kai Chen, Deming Chen, Eric Chen, Chia-Jui Chou, Zih-Chen Ciou, Miles Cochran-Branson, Artur Cordeiro Oudot Choi, Michael Coughlin, Matteo Cremonesi, Maria Dadarlat, Peter Darch, Malina Desai, Daniel Diaz, Steven Dillmann, Javier M. Duarte, Isla Duporge, Urbas Ekka, Saba Entezari Heravi, Hao Fang, Rian Flynn, Geoffrey Fox, Emily Freed, Hang Gao, Jing Gao, Julia Gonski, Matthew J. Graham, Abolfazl Hashemi, Scott Hauck, James Hazelden, Joshua Henry Peterson, Duc Hoang, Wei Hu, Mirco Hünnefeld, David Hyde, Vandana P. Janeja, Nattapon Jaroenchai, Haoyi Jia, Yunfan Kang, Maksim Kholiavchenko, Elham E Khoda, Sangin Kim, Aditya Kumar, Bo-Cheng Lai, Trung Le, Chi-Wei Lee, Janghyeon Lee, Shaocheng Lee, Suzan van der Lee, Charles Lewis, Haitong Li, Haoyang Li, Henry Liao, Mia Liu, Xiaolin Liu, Xiulong Liu, Vladimir Loncar, Fangzheng Lyu, Ilya Makarov, Abhishikth Mallampalli Chen-Yu Mao, Alexander Michels, Alexander Migala, Farouk Mokhtar, Mathieu Morlighem
2025 conf
ICDM (Workshops)
Rhoda Nankabirwa, Vandana P. Janeja
2025 conf
SIGSPATIAL/GIS
Bayu Adhi Tama, Mansa Krishna, Homayra Alam, Mostafa Cham, Omar Faruque, Gong Cheng, Jianwu Wang, Mathieu Morlighem, Vandana P. Janeja
2025 conf
SIGCSE (2)
Michael MacFerrin, Edward Boyda, Kimberly Young, Josephine M. Namayanja, Aneesh Subramanian, Mohamed F. Mokbel, Lujie Karen Chen, Vandana P. Janeja
2025 J jnl
CoRR
Rohan Putatunda, Sanjay Purushotham, Ratnaksha Lele, Vandana P. Janeja
2025 B conf
IEEE Big Data
Bayu Adhi Tama, Homayra Alam, Mostafa Cham, Omar Faruque, Jianwu Wang, Vandana P. Janeja
2025 J jnl
CoRR
Bayu Adhi Tama, Homayra Alam, Mostafa Cham, Omar Faruque, Jianwu Wang, Vandana P. Janeja
2025 J jnl
CoRR
Bayu Adhi Tama, Jianwu Wang, Vandana P. Janeja, Mostafa Cham
2025 conf
SIGSPATIAL/GIS
Maloy Kumar Devnath, Sudip Chakraborty, Vandana P. Janeja
2025 J jnl
CoRR
Maloy Kumar Devnath, Sudip Chakraborty, Vandana P. Janeja
2025 Misc conf
SAC
Bayu Adhi Tama, Sanjay Purushotham, Vandana P. Janeja
2025 conf
SIGSPATIAL/GIS
Chhaya Kulkarni, Nicole-Jeanne Schlegel, Vandana P. Janeja
2025 conf
ICDM (Workshops)
Sai Vikas Amaraneni, Maloy Kumar Devnath, Shalini Srinivasa, Chhaya Kulkarni, Sudip Chakraborty, Vandana P. Janeja
2025 conf
ICDM (Workshops)
Lisan Al Amin, Vandana P. Janeja
2025 J jnl
CoRR
Lisan Al Amin, Vandana P. Janeja
2025 conf
SIGSPATIAL/GIS
Tolulope Ale, Ratnaksha Lele, Nicole-Jeanne Schlegel, Vandana P. Janeja
2025 conf
ICDM (Workshops)
Muhammad Behroze Hassan, Bayu Adhi Tama, Sanjay Purushotham, Vandana P. Janeja
2024 J jnl
Lang. Linguistics Compass
Christine Mallinson, Vandana P. Janeja, Chloe Evered, Zahra Khanjani, Lavon Davis, Noshaba Nasir Bhalli, Kifekachukwu Nwosu
2024 J jnl
CoRR
Zahra Khanjani, Christine Mallinson, James R. Foulds, Vandana P. Janeja
2024 conf
SIGCSE (1)
Vandana P. Janeja, Maria Sanchez, Yi Xuan Khoo, Claudia von Vacano, Lujie Karen Chen
2024 C conf
IGARSS
Bayu Adhi Tama, Vandana P. Janeja, Sanjay Purushotham
2024 conf
SIGSPATIAL/GIS
Maloy Kumar Devnath, Sudip Chakraborty, Vandana P. Janeja
2024 J jnl
CoRR
Saydeh N. Karabatis, Vandana P. Janeja
2024 conf
GeoAnomalies@SIGSPATIAL
Maloy Kumar Devnath, Sudip Chakraborty, Vandana P. Janeja
2024 J jnl
GeoInformatica
Prathamesh Walkikar, Lei Shi, Bayu Adhi Tama, Vandana P. Janeja
2024 C conf
IGARSS
Tolulope Ale, Vandana P. Janeja, Nicole-Jeanne Schlegel
2024 J jnl
CoRR
Tolulope Ale, Nicole-Jeanne Schlegel, Vandana P. Janeja
2024 B conf
IEEE Big Data
Francis Ndikum Nji, Omar Faruque, Mostafa Cham, Vandana P. Janeja, Jianwu Wang
2024 J jnl
CoRR
Francis Ndikum Nji, Omar Faruque, Mostafa Cham, Vandana P. Janeja, Jianwu Wang
2024 conf
SIGSPATIAL/GIS
Chhaya Kulkarni, Nikki Privé, Vandana P. Janeja
2024 J jnl
CoRR
Zahra Khanjani, Tolulope Ale, Jianwu Wang, Lavon Davis, Christine Mallinson, Vandana P. Janeja
2024 J jnl
CoRR
Noshaba Nasir Bhalli, Nehal Naqvi, Chloe Evered, Christine Mallinson, Vandana P. Janeja
2024 J jnl
CoRR
Saydeh N. Karabatis, Vandana P. Janeja
2024 conf
ICKG
Akila Sampath, Omar Faruque, Azim Khan, Vandana P. Janeja, Jianwu Wang
2024 C conf
ICMLA
Rohan Putatunda, Sanjay Purushotham, Vandana P. Janeja
2024 J jnl
CoRR
Vandana P. Janeja, Christine Mallinson
2023 C conf
ISI
Zahra Khanjani, Lavon Davis, Anna Tuz, Kifekachukwu Nwosu, Christine Mallinson, Vandana P. Janeja
2023 C conf
IGARSS
Naomi Tack, Bayu Adhi Tama, Atefeh Jebeli, Vandana P. Janeja, Don Engel, Rebecca M. Williams
2023 C conf
IGARSS
Chhaya Kulkarni, Vandana P. Janeja, Nicole-Jeanne Schlegel
2023 C conf
IGARSS
Atefeh Jebeli, Bayu Adhi Tama, Vandana P. Janeja, Nicholas Holschuh, Claire Jensen, Mathieu Morlighem, Joseph A. MacGregor, Mark A. Fahnestock
2022 J jnl
Frontiers Big Data
Zahra Khanjani, Gabrielle Watson, Vandana P. Janeja
2022 C conf
IGARSS
Sahara Ali, Seraj Al Mahmud Mostafa, Xingyan Li, Sara Khanjani, Jianwu Wang, James R. Foulds, Vandana P. Janeja
2022 J jnl
Int. J. Data Warehous. Min.
Prerna Mohod, Vandana P. Janeja
2021 J jnl
CoRR
Gabrielle Watson, Zahra Khanjani, Vandana P. Janeja
2021 ch.
Use of AI, Robotics, and Modern Tools to Fight Covid-19
Chhaya Kulkarni, Sandipan Dey, Vandana P. Janeja
2021 J jnl
CoRR
Zahra Khanjani, Gabrielle Watson, Vandana P. Janeja
2021 J jnl
J. Cybersecur. Priv.
Faisal Quader, Vandana P. Janeja
2020 J jnl
Digit. Gov. Res. Pract.
James R. Clavin, Sisi Duan, Haibin Zhang, Vandana P. Janeja, Karuna P. Joshi, Yelena Yesha, Lucy C. Erickson, Justin D. Li
2020 J jnl
SIGKDD Explor.
Emre Eftelioglu, Shashi Shekhar, James Hudson, Lucas Joppa, Chaitanya K. Baru, Vandana P. Janeja
2020 J jnl
Int. J. Data Warehous. Min.
Vandana P. Janeja, Josephine M. Namayanja, Yelena Yesha, Anuja Kench, Vasundhara Misal
2020 J jnl
ACM Trans. Manag. Inf. Syst.
Henanksha Sainani, Josephine M. Namayanja, Guneeti Sharma, Vasundhara Misal, Vandana P. Janeja
2019 B conf
SMARTCOMP
Faisal Quader, Vandana P. Janeja
2019 J jnl
Int. J. Data Warehous. Min.
Josephine M. Namayanja, Vandana P. Janeja
2019 conf
BIBM
Mohammad Alodadi, Vandana P. Janeja
2019 conf
OTM Workshops
Javad Zabihi, Vandana P. Janeja
2019 conf
BIBM
Mohammad Alodadi, Vandana P. Janeja
2019 conf
HiPC Workshops
Abu Zaher Md Faridee, Vandana P. Janeja
2018 J jnl
Intell. Data Anal.
Vandana P. Janeja, Jay Gholap, Prathamesh Walkikar, Yelena Yesha, Naphtali Rishe, Michael A. Grasso
2018 A conf
SIGCSE
Vandana P. Janeja, Abu Zaher Md Faridee, Aryya Gangopadhyay, Carolyn B. Seaman, Amy Everhart
2017 ch.
Encyclopedia of GIS
Vandana P. Janeja, Nabil R. Adam
2017 ch.
Encyclopedia of GIS
Lei Shi, Vandana P. Janeja
2017 Misc conf
SAC
Ali Azari, Vandana P. Janeja, Scott Levin
2017 conf
DASFAA (2)
Prathamesh Walkikar, Vandana P. Janeja
2016 C conf
ISI
Vandana P. Janeja, Carolyn B. Seaman, Kerrie Kephart, Aryya Gangopadhyay, Amy Everhart
2016 conf
IEEE BigData
Vasundhara Misal, Vandana P. Janeja, Sai C. Pallaprolu, Yelena Yesha, Raghu Chintalapati
2016 conf
IEEE BigData
Sai C. Pallaprolu, Josephine M. Namayanja, Vandana P. Janeja, C. T. Sai Adithya
2015 conf
ICHI
Anuja Kench, Vandana P. Janeja, Yelena Yesha, Naphtali Rishe, Michael A. Grasso, Amanda Niskar
2015 Misc conf
AMIA
Anuja Kench, Vandana P. Janeja, Amanda Niskar, Yelena Yesha, Naphtali Rishe
2015 conf
BIBM
Jay Gholap, Vandana P. Janeja, Yelena Yesha, Raghu Chintalapati, Harsh Marwaha, Kunal Modi
2015 J jnl
Int. J. Web Eng. Technol.
Ruman Tambe, George Karabatis, Vandana P. Janeja
2015 conf
BIBM
Ali Azari, Vandana P. Janeja, Scott Levin
2015 conf
IEEE BigData
Akshay Grover, Jay Gholap, Vandana P. Janeja, Yelena Yesha, Raghu Chintalapati, Harsh Marwaha, Kunal Modi
2015 J jnl
Knowl. Inf. Syst.
Lei Shi, Aryya Gangopadhyay, Vandana P. Janeja
2015 conf
ICHI
Mohammad Alodadi, Vandana P. Janeja
2015 conf
IEEE BigData
Jay Gholap, Vandana P. Janeja, Yelena Yesha
2014 J jnl
J. Intell. Inf. Syst.
Song Chen, Vandana P. Janeja
2008 ch.
Digital Government
Nabil R. Adam, Vandana P. Janeja, Aabhas V. Paliwal, Vijay Atluri, Soon Ae Chun, Jim Cooper, John Paczkowski, Christof Bornhövd, Joachim Schaper
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}"