Rajit Gadh

87 papers A* 2C 1Misc 1Journal 50Unranked 33
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Rafi Zahedi, Amirhossein Ahmadian, Chen Zhang, Shashank Narayana Gowda, Kourosh Sedghisigarchi, Rajit Gadh
2026 J jnl
IEEE Access
Rafi Zahedi, Rachel Sheinberg, Shashank Narayana Gowda, Janak Raj Chadha, Kourosh Sedghisigarchi, Rajit Gadh
2025 J jnl
CoRR
Xiaojie Tao, Yaoyu Fan, Zhaoyi Ye, Rajit Gadh
2025 J jnl
CoRR
Xiaojie Tao, Rajit Gadh
2025 J jnl
IEEE Access
Xiaojie Tao, Rajit Gadh
2025 J jnl
CoRR
Xiaojie Tao, Rajit Gadh
2025 J jnl
CoRR
Xiaojie Tao, Yaoyu Fan, Zhaoyi Ye, Rajit Gadh
2025 J jnl
CoRR
Xiaojie Tao, Rajit Gadh
2024 J jnl
IEEE Access
Amirhossein Ahmadian, Kourosh Sedghisigarchi, Rajit Gadh
2024 conf
ISGT
Chen Zhang, Kourosh Sedghisigarchi, Rachel Sheinberg, Shashank Narayana Gowda, Rajit Gadh
2024 J jnl
IEEE Trans. Smart Grid
Seungchan Jo, Jae-Young Oh, Jaeho Lee, Seokhwa Oh, Hee-Seung Moon, Chen Zhang, Rajit Gadh, Yong Tae Yoon
2024 conf
ISGT
Keshav Nath, Shashank Narayana Gowda, Chen Zhang, Rohan Shivesh Gowda, Rajit Gadh
2024 conf
SM
Rafi Zahedi, Natalie Lord, Kourosh Sedghisigarchi, Rajit Gadh
2022 conf
ISGT
Shashank Narayana Gowda, Amirhossein Ahmadian, Vishal Anantharaman, Chi-Cheng Peter Chu, Rajit Gadh
2021 conf
ISGT
Shashank Narayana Gowda, Basem A. Eraqi, Hamidreza Nazaripouya, Rajit Gadh
2020 J jnl
IEEE Access
Zhiyuan Cao, Yubo Wang, Chi-Cheng Peter Chu, Rajit Gadh
2019 J jnl
IEEE Trans. Ind. Informatics
Armin Ghasem Azar, Hamidreza Nazaripouya, Behnam Khaki, Chi-Cheng Peter Chu, Rajit Gadh, Rune Hylsberg Jacobsen
2019 conf
ISGT
Shashank Narayana Gowda, Tianyang Zhang, Choung Jae Kim, Rajit Gadh, Hamidreza Nazaripouya
2018 conf
ISGT
Zhiyuan Cao, Chi-Cheng Peter Chu, Rajit Gadh
2018 J jnl
CoRR
Yingqi Xiong, Bin Wang, Chi-Cheng Peter Chu, Rajit Gadh
2017 J jnl
CoRR
Yingqi Xiong, Bin Wang, Chi-Cheng Peter Chu, Rajit Gadh
2017 J jnl
IEEE Internet Things J.
Bin Wang, Yubo Wang, Hamidreza Nazaripouya, Charlie Qiu, Chi-Cheng Peter Chu, Rajit Gadh
2017 J jnl
IEEE Trans. Smart Grid
Wenbo Shi, Na Li, Chi-Cheng Peter Chu, Rajit Gadh
2015 conf
ICIT
Alessio Fachechi, Luca Mainetti, Luca Palano, Luigi Patrono, Maria Laura Stefanizzi, Roberto Vergallo, Peter Chu, Rajit Gadh
2015 J jnl
IEEE Trans. Smart Grid
Wenbo Shi, Xiaorong Xie, Chi-Cheng Peter Chu, Rajit Gadh
2015 conf
ISGT
Bin Wang, Boyang Hu, Charlie Qiu, Chi-Cheng Peter Chu, Rajit Gadh
2015 conf
SmartGridComm
Bin Wang, Yubo Wang, Charlie Qiu, Chi-Cheng Peter Chu, Rajit Gadh
2015 J jnl
IEEE Trans. Ind. Informatics
Mostafa Majidpour, Charlie Qiu, Chi-Cheng Peter Chu, Rajit Gadh, Hemanshu Roy Pota
2015 conf
ISGT
Rui Huang, Yubo Wang, Wenbo Shi, Daoyuan Yao, Boyang Hu, Chi-Cheng Peter Chu, Rajit Gadh
2014 conf
SmartGridComm
Wenbo Shi, Xiaorong Xie, Chi-Cheng Peter Chu, Rajit Gadh
2014 conf
ICCVE
Mostafa Majidpour, Charlie Qiu, Chi-Cheng Peter Chu, Rajit Gadh, Hemanshu Roy Pota
2014 conf
SmartGridComm
Wenbo Shi, Eun-Kyu Lee, Daoyuan Yao, Rui Huang, Chi-Cheng Peter Chu, Rajit Gadh
2014 conf
ICCVE
Mostafa Majidpour, Chi-Cheng Peter Chu, Rajit Gadh, Hemanshu Roy Pota
2014 conf
SmartGridComm
Yubo Wang, Omar Sheikh, Boyang Hu, Chi-Cheng Peter Chu, Rajit Gadh
2014 conf
SmartGridComm
Mostafa Majidpour, Charlie Qiu, Chi-Cheng Peter Chu, Rajit Gadh, Hemanshu Roy Pota
2014 J jnl
IEEE J. Sel. Areas Commun.
Wenbo Shi, Na Li, Xiaorong Xie, Chi-Cheng Peter Chu, Rajit Gadh
2014 conf
ISGT
Joshua Chynoweth, Ching-Yen Chung, Charlie Qiu, Chi-Cheng Peter Chu, Rajit Gadh
2013 J jnl
CoRR
Ching-Yen Chung, Joshua Chynoweth, Charlie Qiu, Chi-Cheng Peter Chu, Rajit Gadh
2013 conf
RFID-TA
Ching-Yen Chung, Aleksey Shepelev, Charlie Qiu, Chi-Cheng Peter Chu, Rajit Gadh
2013 conf
ICTC
Ching-Yen Chung, Joshua Chynoweth, Charlie Qiu, Chi-Cheng Peter Chu, Rajit Gadh
2013 J jnl
Int. J. Parallel Emergent Distributed Syst.
Siddhartha Mal, Arunabh Chattopadhyay, Albert Yang, Rajit Gadh
2013 J jnl
IEEE J. Sel. Areas Commun.
Eun-Kyu Lee, Rajit Gadh, Mario Gerla
2013 J jnl
IEEE Internet Comput.
Eun-Kyu Lee, Chi-Cheng Peter Chu, Rajit Gadh
2013 conf
ICTC
Aleksey Shepelev, Ching-Yen Chung, Chi-Cheng Peter Chu, Rajit Gadh
2013 J jnl
Int. J. Commun. Networks Distributed Syst.
Siddhartha Mal, Rajit Gadh
2013 conf
SmartGridComm
Ching-Yen Chung, Edward Youn, Joshua Chynoweth, Charlie Qiu, Chi-Cheng Peter Chu, Rajit Gadh
2012 J jnl
J. Comput. Inf. Sci. Eng.
Arunabh Chattopadhyay, Jérémy Stentz, Rajit Gadh
2012 conf
SmartGridComm
Eun-Kyu Lee, Rajit Gadh, Mario Gerla
2012 conf
SmartGridComm
Rui Huang, Tiana Huang, Rajit Gadh, Na Li
2011 conf
RFID-TA
Arunabh Chattopadhyay, B. S. Prabhu, Rajit Gadh
2010 J jnl
Proc. IEEE
Katina Michael, George Roussos, George Q. Huang, Arunabh Chattopadhyay, Rajit Gadh, B. S. Prabhu, Chi-Cheng Peter Chu
2010 J jnl
Proc. IEEE
Rajit Gadh, George Roussos, Katina Michael, George Q. Huang, B. S. Prabhu, Chi-Cheng Peter Chu
2010 J jnl
Expert Syst. Appl.
Jae Yeol Lee, Dong Woo Seo, Byung Youn Song, Rajit Gadh
2009 J jnl
Int. J. Internet Protoc. Technol.
Xiaoyong Su, Chi-Cheng Peter Chu, B. S. Prabhu, Rajit Gadh
2009 J jnl
J. Theor. Appl. Electron. Commer. Res.
Tim Coltman, Rajit Gadh, Katina Michael
2009 J jnl
J. Theor. Appl. Electron. Commer. Res.
Chih-Cheng Ou Yang, B. S. Prabhu, Charlie Qu, Chi-Cheng Peter Chu, Rajit Gadh
2008 conf
WTS
Kirby Chiang, Chi-Cheng Peter Chu, B. S. Prabhu, Rajit Gadh
2008 J jnl
J. Theor. Appl. Electron. Commer. Res.
Tim Coltman, Rajit Gadh, Katina Michael
2008 conf
WTS
Xiaoyong Su, Chi-Cheng Peter Chu, B. S. Prabhu, Rajit Gadh
2007 J jnl
IEEE Syst. J.
Xiaoyong Su, Chi-Cheng Peter Chu, B. S. Prabhu, Rajit Gadh
2006 C conf
WOWMOM
Xiaoyong Su, Chi-Cheng Peter Chu, B. S. Prabhu, Rajit Gadh
2006 conf
CCNC
Chi-Cheng Peter Chu, Xiaoyong Su, B. S. Prabhu, Rajit Gadh, Swetha Kurup, Sridhar Gangadharpalli, Sridhar Varadarajan
2006 J jnl
J. Comput. Inf. Sci. Eng.
Xiaoyong Su, B. S. Prabhu, Chi-Cheng Peter Chu, Rajit Gadh
2005 conf
DEXA Workshops
Praveen Kumar, Sridhar Gangadharpalli, Sridhar Varadarajan, Rajit Gadh
2004 conf
PWC
Harish Ramamurthy, B. S. Prabhu, Rajit Gadh
2002 J jnl
J. Comput. Inf. Sci. Eng.
Chi-Cheng Peter Chu, Jianzhong Mo, Rajit Gadh
2002 J jnl
Comput. Aided Des.
N. Shyamsundar, Rajit Gadh
2001 J jnl
J. Comput. Inf. Sci. Eng.
Sankar Jayaram, Judy M. Vance, Rajit Gadh, Uma Jayaram, Hari Srinivasan
2001 J jnl
Comput. Aided Des.
Yong Lu, Rajit Gadh, Timothy J. Tautges
2001 J jnl
Comput. Aided Des.
N. Shyamsundar, Rajit Gadh
2000 Misc conf
PG
Yong Lu, Rajit Gadh
1999 J jnl
Comput. Aided Des.
Shang-Sheng Liu, J. Uicker Jr., Rajit Gadh
1999 conf
IMR
Yong Lu, Rajit Gadh, Timothy J. Tautges
1998 J jnl
Comput. Aided Des.
Hari Srinivasan, Rajit Gadh
1998 A* conf
ICRA
Hari Srinivasan, Rajit Gadh
1998 J jnl
Comput. Aided Des.
Rajit Gadh, Ratnakar Sonthi
1998 J jnl
Comput. Aided Des.
Ratnakar Sonthi, Rajit Gadh
1997 J jnl
J. Intell. Manuf.
Hari Srinivasan, N. Shyamsundar, Rajit Gadh
1997 J jnl
Comput. Aided Des.
Tushar H. Dani, Rajit Gadh
1997 J jnl
Comput. Aided Des.
Chi-Cheng Peter Chu, Tushar H. Dani, Rajit Gadh
1997 A* conf
ICRA
Chi-Cheng Peter Chu, Tushar H. Dani, Rajit Gadh
1997 conf
Symposium on Solid Modeling and Applications
Ratnakar Sonthi, Girish Kunjur, Rajit Gadh
1996 J jnl
Comput. Aided Des.
Chi-Cheng Peter Chu, Rajit Gadh
1996 J jnl
Comput. Aided Des.
Rajit Gadh
1996 J jnl
J. Intell. Manuf.
Scott L. Springer, Rajit Gadh
1992 J jnl
Comput. Aided Des.
Rajit Gadh, Fritz B. Prinz
1989 conf
MIT-JSME Workshop
Rajit Gadh, Donna Herbert, Alexander Kott, Charles P. Kollar
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}"