J. Marcos Alonso

87 papers C 57Journal 28Unranked 2
YearRankTypeTitle / Venue / Authors
2025 C conf
IAS
Igor B. Barboza, Guirguis Z. Abdelmessih, Renan R. Duarte, J. Marcos Alonso, Maikel Fernando Menke, Marco A. Dalla Costa
2025 C conf
IAS
Hamed Moradmand Jazi, Mehdi Karimi Hasan Abadi, Ehsan Adib, J. Marcos Alonso, Pablo Quintana Barcia, Javier Ribas
2024 C conf
IAS
Ignacio M. Álvarez, Guirguis Z. Abdelmessih, J. Marcos Alonso, Marco A. Dalla Costa, José Maria Cámara
2024 C conf
IAS
Guirguis Z. Abdelmessih, J. Marcos Alonso, Cesar Acero Marquina, Douglas Camponogara, Marco Antonio Dalla Costa
2024 J jnl
IEEE Trans. Ind. Electron.
Édwin Augusto Tonolo, Jefferson Wilhelm Meyer Soares, Alceu André Badin, J. Marcos Alonso
2024 C conf
IAS
J. Marcos Alonso, David Gacio, Guirguis Z. Abdelmessih, Ignacio M. Álvarez Díaz, Yijie Wang
2023 C conf
IAS
J. Marcos Alonso, Guirguis Z. Abdelmessih, Marco A. Dalla Costa, Yueshi Guan, Yijie Wang
2023 C conf
IAS
Guirguis Z. Abdelmessih, J. Marcos Alonso, Igor B. Barboza, Marco A. Dalla Costa
2023 C conf
IAS
Matheus V. Linhares, Mateus V. Grafen, Lucas Teixeira, J. Marcos Alonso, Marco A. Dalla Costa
2022 J jnl
IEEE Trans. Ind. Electron.
Felipe Loose, Lucas Teixeira, João Paulo Brum, Carlos Henrique Barriquello, Vitalio Alfonso Reguera, J. Marcos Alonso, Marco A. Dalla Costa
2022 C conf
IAS
Nelson Spode, Marco A. Dalla Costa, Guirguis Z. Abdelmessih, J. Marcos Alonso, Renan R. Duarte
2021 J jnl
IEEE Trans. Ind. Electron.
Yousu Yao, Chengxiong Tang, Shenghan Gao, Yijie Wang, J. Marcos Alonso, Udaya K. Madawala, Dianguo Xu
2021 J jnl
IEEE Trans. Ind. Electron.
Jean S. Brand, Guirguis Z. Abdelmessih, J. Marcos Alonso, Yijie Wang, Yueshi Guan, Marco A. Dalla Costa
2021 C conf
IAS
Lucas Teixeira, Felipe Loose, Carlos Henrique Barriquello, J. Marcos Alonso, Vitalio Alfonso Reguera, Marco Antonio Dalla Costa
2020 C conf
IAS
Lucas Teixeira, Felipe Loose, Carlos Henrique Barriquello, J. Marcos Alonso, Vitalio Alfonso Reguera, Marco Antonio Dalla Costa
2020 J jnl
IEEE Trans. Ind. Electron.
Yuqi Wei, Quanming Luo, Xiong Du, Necmi Altin, J. Marcos Alonso, Homer Alan Mantooth
2020 C conf
IAS
Guirguis Z. Abdelmessih, J. Marcos Alonso, Nelson da S. Spode, Marco A. Dalla Costa
2020 C conf
IAS
Jean S. Brand, Felipe Loose, Guirguis Z. Abdelmessih, Nelson da S. Spode, J. Marcos Alonso, Marco A. Dalla Costa
2019 C conf
IAS
Felipe Loose, Lucas Teixeira, João Paulo Brum, Marco A. Dalla Costa, Carlos Henrique Barriquello, Vitalio Alfonso Reguera, J. Marcos Alonso
2019 C conf
IAS
Guirguis Z. Abdelmessih, J. Marcos Alonso, Wen-Tien Tsai, Marco A. Dalla Costa
2019 C conf
IECON
Lucas Teixeira, Felipe Loose, Carlos Henrique Barriquello, Vitalio Alfonso Reguera, Marco Antonio Dalla Costa, J. Marcos Alonso
2019 C conf
IAS
Gilberto Martínez, J. Marcos Alonso, René Osorio Sánchez
2019 C conf
IAS
Renan R. Duarte, Abner Campos, Marco A. Dalla Costa, Vitor Cristiano Bender, J. Marcos Alonso
2018 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Yijie Wang, Shu Zhang, J. Marcos Alonso, Xiaosheng Liu, Dianguo Xu
2018 C conf
IAS
Maicol F. de Melo, Jean S. Brand, Renan R. Duarte, Marco A. Dalla Costa, J. Marcos Alonso, Yijie Wang
2018 J jnl
IEEE Trans. Ind. Electron.
Guilherme Gindri Pereira, Marco A. Dalla Costa, J. Marcos Alonso, Maicol F. de Melo, Carlos Henrique Barriquello
2018 J jnl
IEEE Trans. Ind. Electron.
René Osorio, J. Marcos Alonso, Nimrod Vázquez, Sergio Pinto, Felipe De Jesus Sorcia-Vazquez, Mario Martínez-García, Luis Manuel Barrera
2018 C conf
IAS
Renan R. Duarte, Guilherme Gindri Pereira, Marco A. Dalla Costa, Carlos Henrique Barriquello, J. Marcos Alonso
2017 J jnl
IEEE Trans. Ind. Electron.
Yijie Wang, J. Marcos Alonso, Xinbo Ruan
2017 C conf
IAS
Shu Zhang, Yuping Qiu, Yijie Wang, Xiaosheng Liu, J. Marcos Alonso, Dianguo Xu
2017 C conf
IAS
Gilberto Martínez, J. Marcos Alonso, René Osorio Sanchez
2017 J jnl
IEEE Trans. Ind. Electron.
Yijie Wang, J. Marcos Alonso, Xinbo Ruan
2017 J jnl
IEEE Trans. Ind. Electron.
Guilherme Gindri Pereira, Marco A. Dalla Costa, J. Marcos Alonso, Maicol Flores de Melo, Carlos Henrique Barriquello
2017 C conf
IAS
Guirguis Z. Abdelmessih, J. Marcos Alonso
2017 C conf
IAS
Renan R. Duarte, Guilherme F. Ferreira, Marco A. Dalla Costa, J. Marcos Alonso
2016 C conf
IAS
Guirguis Z. Abdelmessih, J. Marcos Alonso
2016 C conf
IAS
J. Marcos Alonso, Marina S. Perdigão, Marco A. Dalla Costa, Gilberto Martínez, René Osorio Sanchez
2016 C conf
IECON
Paulo Reginatto, Marcelo Freitas da Silva, Alysson R. Seidel, Mikhail Polonskii, J. Marcos Alonso, Rodrigo V. Tambara
2016 C conf
IECON
Valter S. Costa, Marina S. Perdigão, André Mendes, J. Marcos Alonso
2016 C conf
IAS
Renan R. Duarte, Guilherme F. Ferreira, Marco A. Dalla Costa, J. Marcos Alonso
2016 C conf
IAS
J. Marcos Alonso, Marina S. Perdigão, Guirguis Z. Abdelmessih, Marco A. Dalla Costa, Yijie Wang
2015 C conf
IAS
Gilberto Martínez, J. Marcos Alonso
2015 conf
ISIE
Maicol Flores de Melo, William Dotto Vizzotto, Leandro Chies, Marco Antonio Dalla Costa, J. Marcos Alonso
2015 J jnl
IEEE Trans. Ind. Electron.
Douglas Camponogara, Diogo Ribeiro Vargas, Marco Antonio Dalla Costa, J. Marcos Alonso, Jorge García, Tiago B. Marchesan
2015 C conf
IAS
Vitor Cristiano Bender, Norton D. Barth, Marina Camponogara, Rafael A. Pinto, Tiago B. Marchesan, J. Marcos Alonso
2015 conf
ISIE
Vitor Cristiano Bender, Norton D. Barth, Fernanda B. Mendes, Rafael A. Pinto, Tiago B. Marchesan, J. Marcos Alonso
2015 C conf
IAS
Marina S. Perdigão, S. F. Ferreira, M. Martins, André Mendes, J. Marcos Alonso
2015 C conf
IAS
Guilherme Gindri Pereira, Maicol F. de Melo, Marco A. Dalla Costa, J. Marcos Alonso
2015 J jnl
IEEE Trans. Ind. Electron.
Marina S. Perdigão, João Pedro F. Trovão, J. Marcos Alonso, Eduardo Sousa Saraiva
2015 C conf
IAS
Maicol F. de Melo, William Dotto Vizzotto, Maikel Fernando Menke, Marco A. Dalla Costa, Alysson R. Seidel, J. Marcos Alonso
2014 C conf
IAS
Rafael A. Pinto, J. Marcos Alonso, Marina S. Perdigão, Marcelo Freitas da Silva, Ricardo N. do Prado
2014 C conf
IAS
Marcelo R. Cosetin, T. E. Bolzan, Paulo Cesar Vargas da Luz, Marcelo Freitas da Silva, J. Marcos Alonso, Ricardo N. do Prado
2014 C conf
IAS
Jeferson Fraytag, R. N. Marchesan, M. E. Schlittler, Alysson R. Seidel, Ricardo N. do Prado, J. Marcos Alonso, Marcelo Freitas da Silva
2013 C conf
IAS
Francesco Sichirollo, J. Marcos Alonso, Giorgio Spiazzi
2013 J jnl
IEEE Trans. Ind. Electron.
Marcelo Freitas da Silva, Jeferson Fraytag, M. E. Schlittler, Tiago Bandeira Marchesan, Marco A. Dalla Costa, J. Marcos Alonso, Ricardo Nederson do Prado
2013 C conf
IAS
Maikel Fernando Menke, Marcelo Freitas da Silva, Fabio Bisogno, Marina S. Perdigão, Eduardo Sousa Saraiva, J. Marcos Alonso, Alysson R. Seidel
2013 C conf
IAS
J. Marcos Alonso, David Gacio Vaquero, Francesco Sichirollo, Alysson R. Seidel, Marco A. Dalla Costa
2013 C conf
IAS
Pedro S. Almeida, A. L. C. Mello, Henrique A. C. Braga, Marco A. Dalla Costa, J. Marcos Alonso
2012 J jnl
IEEE Trans. Ind. Electron.
J. Marcos Alonso, Juan Vina, David Gacio Vaquero, Gilberto Martínez, René Osorio
2012 C conf
IECON
Juliano P. de Lopes, Maikel Fernando Menke, Fabio Ecke Bisogno, Ricardo N. do Prado, Javier Ribas, J. Marcos Alonso, Alysson R. Seidel
2012 J jnl
IEEE Trans. Ind. Electron.
Marina S. Perdigão, J. Marcos Alonso, David Gacio Vaquero, Eduardo Sousa Saraiva
2012 J jnl
IEEE Trans. Ind. Electron.
Francisco J. Azcondo, J. Marcos Alonso, S. Y. Hui
2012 C conf
IECON
Jorge García, Douglas Camponogara, Marco A. Dalla Costa, David Gacio, J. Marcos Alonso, Alexandre Campos
2012 C conf
IECON
Douglas Camponogara, Diogo Ribeiro Vargas, Alexandre Campos, Marco A. Dalla Costa, Jorge García, J. Marcos Alonso
2012 C conf
IECON
Douglas Camponogara, Diogo Ribeiro Vargas, Alexandre Campos, Marco A. Dalla Costa, Fabio A. Berlitz, Jorge García, J. Marcos Alonso
2012 J jnl
IEEE Trans. Ind. Electron.
David Gacio, J. Marcos Alonso, Jorge García, Lidia Campa, Mario Crespo, Manuel Rico-Secades
2012 C conf
IAS
J. Marcos Alonso, David Gacio, Antonio J. Calleja, Francesco Sichirollo, Marcelo Freitas da Silva, Marco A. Dalla Costa, Ricardo N. do Prado
2012 C conf
IECON
Marcelo R. Cosetin, Paulo Cesar Vargas da Luz, Marcelo Freitas da Silva, Fabio Bisogno, J. Marcos Alonso, Ricardo N. do Prado
2012 C conf
IECON
Francesco Sichirollo, J. Marcos Alonso, Giorgio Spiazzi
2011 J jnl
IEEE Trans. Ind. Electron.
David Gacio, J. Marcos Alonso, Antonio J. Calleja, Jorge García, Manuel Rico-Secades
2011 C conf
IAS
J. Marcos Alonso, David Gacio, Antonio J. Calleja, Javier Ribas, Emilio López Corominas
2011 C conf
IAS
H. V. Marques, Alysson R. Seidel, Marina S. Perdigão, J. Marcos Alonso, Eduardo Sousa Saraiva
2011 C conf
IAS
Andressa C. Schittler, Douglas Pappis, Alexandre Campos, Marco A. Dalla Costa, J. Marcos Alonso
2011 J jnl
IEEE Trans. Ind. Electron.
Marina S. Perdigão, J. Marcos Alonso, David Gacio Vaquero, Eduardo Sousa Saraiva
2011 C conf
IAS
Douglas Pappis, Andressa C. Schittler, Jonas R. Pause, Marco A. Dalla Costa, Alexandre Campos, J. Marcos Alonso
2011 J jnl
IEEE Trans. Ind. Electron.
J. Marcos Alonso, Marina S. Perdigão, Javier Ribas, David Gacio, Eduardo Sousa Saraiva
2008 J jnl
IEEE Trans. Ind. Electron.
J. Marcos Alonso, Carlos Ordiz, Marco A. Dalla Costa
2008 J jnl
IEEE Trans. Ind. Electron.
Marco A. Dalla Costa, J. Marcos Alonso, Jesús Cardesín Miranda, Jorge García, Diego G. Lamar
2008 J jnl
IEEE Trans. Ind. Electron.
Marina S. Perdigão, J. Marcos Alonso, Marco A. Dalla Costa, Eduardo Sousa Saraiva
2008 C conf
IAS
David Gacio Vaquero, Jesús Cardesín Miranda, Emilio L. Corominas, J. Marcos Alonso, Marco A. Dalla Costa, Antonio Javier Calleja Rodriguez
2008 J jnl
IEEE Trans. Ind. Electron.
J. Marcos Alonso, Marco A. Dalla Costa, Carlos Ordiz
2008 J jnl
IEEE Trans. Ind. Electron.
J. Marcos Alonso, Marco A. Dalla Costa, Manuel Rico-Secades, Jesús Cardesín Miranda, Jorge García
2007 C conf
IAS
Marco A. Dalla Costa, J. Marcos Alonso, Tiago B. Marchesan, Murilo Cervi, Ricardo N. do Prado
2007 C conf
IAS
J. Marcos Alonso, Carlos Ordíz, Marco A. Dalla Costa, Javier Ribas, Jesús Cardesín Miranda
2007 J jnl
IEEE Trans. Ind. Electron.
Tiago Bandeira Marchesan, Marco A. Dalla Costa, J. Marcos Alonso, Ricardo Nederson do Prado
2007 C conf
IAS
Tiago B. Marchesan, Marco A. Dalla Costa, Marina S. Perdigão, J. Marcos Alonso, Ricardo N. do Prado
1997 J jnl
IEEE Trans. Ind. Electron.
J. Marcos Alonso, Pedro José Villegas, Juan Díaz, Cecilio Blanco, Manuel Rico-Secades
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}"