Ramya Rasipuram

26 papers A 8C 3Misc 6Journal 7Unranked 2
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Amrit Romana, Jaya Narain, Tien Dung Tran, Andrea Davis, Jason Fong, Ramya Rasipuram, Vikramjit Mitra
2024 Misc conf
ICASSP
Cheng-chieh Yeh, Amirreza Shirani, Weicheng Zhang, Tuomo Raitio, Ramya Rasipuram, Ladan Golipour, David Winarsky
2023 conf
SSW
Weicheng Zhang, Cheng-chieh Yeh, Will Beckman, Tuomo Raitio, Ramya Rasipuram, Ladan Golipour, David Winarsky
2021 C conf
ASRU
Sivanand Achanta, Albert Antony, Ladan Golipour, Jiangchuan Li, Tuomo Raitio, Ramya Rasipuram, Francesco Rossi, Jennifer Shi, Jaimin Upadhyay, David Winarsky, Hepeng Zhang
2021 J jnl
CoRR
Sivanand Achanta, Albert Antony, Ladan Golipour, Jiangchuan Li, Tuomo Raitio, Ramya Rasipuram, Francesco Rossi, Jennifer Shi, Jaimin Upadhyay, David Winarsky, Hepeng Zhang
2020 A conf
INTERSPEECH
Tuomo Raitio, Ramya Rasipuram, Dan Castellani
2020 J jnl
CoRR
Tuomo Raitio, Ramya Rasipuram, Dan Castellani
2018 J jnl
Speech Commun.
Marzieh Razavi, Ramya Rasipuram, Mathew Magimai-Doss
2017 A conf
INTERSPEECH
Tim Capes, Paul Coles, Alistair Conkie, Ladan Golipour, Abie Hadjitarkhani, Qiong Hu, Nancy Huddleston, Melvyn Hunt, Jiangchuan Li, Matthias Neeracher, Kishore Prahallad, Tuomo Raitio, Ramya Rasipuram, Greg Townsend, Becci Williamson, David Winarsky, Zhizheng Wu, Hepeng Zhang
2016 J jnl
Speech Commun.
Marzieh Razavi, Ramya Rasipuram, Mathew Magimai-Doss
2016 J jnl
Comput. Speech Lang.
Ramya Rasipuram, Mathew Magimai-Doss
2016 A conf
INTERSPEECH
Ramya Rasipuram, Milos Cernak, Mathew Magimai-Doss
2015 J jnl
Speech Commun.
Ramya Rasipuram, Mathew Magimai-Doss
2015 A conf
INTERSPEECH
Ramya Rasipuram, Milos Cernak, Alexandre Nanchen, Mathew Magimai-Doss
2015 Misc conf
ICASSP
Ramya Rasipuram, Marzieh Razavi, Mathew Magimai-Doss
2015 A conf
INTERSPEECH
Raphael Ullmann, Ramya Rasipuram, Mathew Magimai-Doss, Hervé Bourlard
2014 Misc conf
ICASSP
Marzieh Razavi, Ramya Rasipuram, Mathew Magimai-Doss
2013 Misc conf
ICASSP
Ramya Rasipuram, Peter Bell, Mathew Magimai-Doss
2013 A conf
INTERSPEECH
Ramya Rasipuram, Mathew Magimai-Doss
2013 C conf
ASRU
Ramya Rasipuram, Marzieh Razavi, Mathew Magimai-Doss
2012 Misc conf
ICASSP
Ramya Rasipuram, Mathew Magimai-Doss
2012 A conf
INTERSPEECH
Ramya Rasipuram, Mathew Magimai-Doss
2011 C conf
ASRU
David Imseng, Ramya Rasipuram, Mathew Magimai-Doss
2011 A conf
INTERSPEECH
Mathew Magimai-Doss, Ramya Rasipuram, Guillermo Aradilla, Hervé Bourlard
2011 conf
ICANN (1)
Ramya Rasipuram, Mathew Magimai-Doss
2011 Misc conf
ICASSP
Ramya Rasipuram, Mathew Magimai-Doss
redb/extractors/decompiler/apk/apktool_wrapper.py
← Index redb/extractors/decompiler/apk/apktool_wrapper.py python
"""Apktool disassembler subprocess wrapper.

Manages apktool subprocess execution for smali disassembly,
following the CAPA extractor subprocess pattern.
"""

import os
import signal
import subprocess
from typing import List, Optional


class ApktoolDisassembler:
    """Subprocess wrapper for apktool smali disassembly."""

    def __init__(
        self, apktool_path: str = None, timeout: int = None, log=None
    ):
        self.apktool_path = apktool_path or os.getenv("APKTOOL_PATH", "apktool")
        self.timeout = timeout or int(os.getenv("APKTOOL_TIMEOUT", "120"))
        self.log = log

    def disassemble(self, apk_path: str, output_dir: str) -> bool:
        """Run apktool disassembly on an APK file.

        Returns True on success, False on failure.
        """
        cmd = [
            self.apktool_path,
            "d",
            "--no-res",
            "--force",
            "--output", output_dir,
            apk_path,
        ]

        try:
            process = subprocess.Popen(
                cmd,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True,
                preexec_fn=os.setsid,
            )

            try:
                stdout, stderr = process.communicate(timeout=self.timeout)
                if process.returncode != 0:
                    if self.log:
                        self.log.warning(
                            f"apktool returned non-zero exit code {process.returncode}: "
                            f"{stderr[:500] if stderr else 'no stderr'}"
                        )
                    return False
                return True

            except subprocess.TimeoutExpired:
                if self.log:
                    self.log.error(
                        f"apktool timed out after {self.timeout}s"
                    )
                try:
                    os.killpg(os.getpgid(process.pid), signal.SIGTERM)
                    process.wait(timeout=3)
                except (ProcessLookupError, subprocess.TimeoutExpired):
                    try:
                        os.killpg(os.getpgid(process.pid), signal.SIGKILL)
                    except ProcessLookupError:
                        pass
                return False

        except FileNotFoundError:
            if self.log:
                self.log.error(
                    f"apktool not found at '{self.apktool_path}'. "
                    "Install apktool or set APKTOOL_PATH env var."
                )
            return False
        except Exception as e:
            if self.log:
                self.log.error(f"apktool execution error: {e}")
            return False

    def get_smali_directories(self, output_dir: str) -> List[str]:
        """Return paths to all smali output directories.

        Handles multi-DEX: smali/, smali_classes2/, smali_classes3/, etc.
        """
        smali_dirs = []
        if not os.path.isdir(output_dir):
            return smali_dirs

        for entry in sorted(os.listdir(output_dir)):
            if entry == "smali" or entry.startswith("smali_classes"):
                full_path = os.path.join(output_dir, entry)
                if os.path.isdir(full_path):
                    smali_dirs.append(full_path)

        return smali_dirs