Carlos M. Fonseca

82 papers A 13B 10C 13Misc 1Journal 30Unranked 9
YearRankTypeTitle / Venue / Authors
2025 A conf
FOGA
Gonçalo Lopes, Luís Paquete, Carlos M. Fonseca
2024 J jnl
Math. Methods Oper. Res.
Carlos Henggeler Antunes, Carlos M. Fonseca, Luís Paquete, Michael Stiglmayr
2023 J jnl
Dagstuhl Reports
Richard Allmendinger, Carlos M. Fonseca, Serpil Sayin, Margaret M. Wiecek, Michael Stiglmayr
2023 ch.
Many-Criteria Optimization and Decision Analysis
Andreia P. Guerreiro, Kathrin Klamroth, Carlos M. Fonseca
2022 J jnl
ACM Comput. Surv.
Andreia P. Guerreiro, Carlos M. Fonseca, Luís Paquete
2022 J jnl
Dagstuhl Reports
Anne Auger, Carlos M. Fonseca, Tobias Friedrich, Johannes Lengler
2021 J jnl
IEEE Access
Joaquim Leitão, Carlos M. Fonseca, Paulo Gil, Bernardete Ribeiro, Alberto Cardoso
2020 J jnl
Eur. J. Oper. Res.
Andreia P. Guerreiro, Carlos M. Fonseca
2020 J jnl
IEEE Trans. Evol. Comput.
Pietro S. Oliveto, Anne Auger, Francisco Chicano, Carlos M. Fonseca
2020 J jnl
CoRR
Luca E. Schäfer, Stefan Ruzika, Sven O. Krumke, Carlos M. Fonseca
2020 J jnl
Math. Methods Oper. Res.
Britta Schulze, Michael Stiglmayr, Luís Paquete, Carlos M. Fonseca, David Willems, Stefan Ruzika
2020 J jnl
Dagstuhl Reports
Carlos M. Fonseca, Kathrin Klamroth, Günter Rudolph, Margaret M. Wiecek
2020 J jnl
CoRR
Andreia P. Guerreiro, Carlos M. Fonseca, Luís Paquete
2019 conf
OR
Luca E. Schäfer, Tobias Dietz, Marco V. Natale, Stefan Ruzika, Sven O. Krumke, Carlos M. Fonseca
2019 J jnl
Dagstuhl Reports
Carola Doerr, Carlos M. Fonseca, Tobias Friedrich, Xin Yao
2018 J jnl
IEEE Trans. Evol. Comput.
Andreia P. Guerreiro, Carlos M. Fonseca
2018 J jnl
Trans. Emerg. Telecommun. Technol.
André Riker, Carlos M. Fonseca, Marília Curado, Edmundo Monteiro
2018 B conf
EuroGP
João Macedo, Carlos M. Fonseca, Ernesto Costa
2018 ed.
PPSN (1)
Anne Auger, Carlos M. Fonseca, Nuno Lourenço, Penousal Machado, Luís Paquete, L. Darrell Whitley
2018 ed.
PPSN (2)
Anne Auger, Carlos M. Fonseca, Nuno Lourenço, Penousal Machado, Luís Paquete, L. Darrell Whitley
2017 J jnl
Comput. Oper. Res.
Renaud Lacour, Kathrin Klamroth, Carlos M. Fonseca
2017 C conf
EMO
Kaifeng Yang, Michael Emmerich, André H. Deutz, Carlos M. Fonseca
2017 J jnl
CoRR
Ivo Gonçalves, Sara Silva, Carlos M. Fonseca, Mauro Castelli
2017 A conf
GECCO
Ivo Gonçalves, Sara Silva, Carlos M. Fonseca, Mauro Castelli
2016 ch.
Advances in Stochastic and Deterministic Global Optimization
Michael Emmerich, Kaifeng Yang, André H. Deutz, Hao Wang, Carlos M. Fonseca
2016 B conf
CEC
Carlos M. Fonseca, Elizabeth Fialho Wanner
2016 conf
GECCO (Companion)
Ivo Gonçalves, Sara Silva, Carlos M. Fonseca, Mauro Castelli
2016 J jnl
Evol. Comput.
Andreia P. Guerreiro, Carlos M. Fonseca, Luís Paquete
2016 A conf
PPSN
Andreia P. Guerreiro, Carlos M. Fonseca
2016 J jnl
Evol. Comput.
Tobias Kuhn, Carlos M. Fonseca, Luís Paquete, Stefan Ruzika, Miguel Duarte, José Rui Figueira
2016 A conf
PPSN
Claudia R. Correa, Elizabeth F. Wanner, Carlos M. Fonseca
2016 A conf
PPSN
Carola Doerr, Nicolas Bredèche, Enrique Alba, Thomas Bartz-Beielstein, Dimo Brockhoff, Benjamin Doerr, Gusz Eiben, Michael G. Epitropakis, Carlos M. Fonseca, Andreia P. Guerreiro, Evert Haasdijk, Jacqueline Heinerman, Julien Hubert, Per Kristian Lehre, Luigi Malagò, Juan Julián Merelo Guervós, Julian Francis Miller, Boris Naujoks, Pietro S. Oliveto, Stjepan Picek, Nelishia Pillay, Mike Preuss, Patricia Ryser-Welch, Giovanni Squillero, Jörg Stork, Dirk Sudholt, Alberto Paolo Tonda, L. Darrell Whitley, Martin Zaefferer
2015 J jnl
CoRR
Renaud Lacour, Kathrin Klamroth, Carlos M. Fonseca
2015 conf
EMO (2)
Rafael Frederico Alexandre, Felipe Campelo, Carlos M. Fonseca, João Antônio de Vasconcelos
2015 A conf
GECCO
Andreia P. Guerreiro, Carlos M. Fonseca, Luís Paquete
2015 B conf
EuroGP
Ivo Gonçalves, Sara Silva, Carlos M. Fonseca
2015 J jnl
Comput. Oper. Res.
Daniel Vaz, Luís Paquete, Carlos M. Fonseca, Kathrin Klamroth, Michael Stiglmayr
2015 Misc conf
EPIA
Ivo Gonçalves, Sara Silva, Carlos M. Fonseca
2014 A conf
PPSN
Iryna Yevseyeva, Andreia P. Guerreiro, Michael T. M. Emmerich, Carlos M. Fonseca
2014 J jnl
Neurocomputing
Jean Paulo Martins, Carlos M. Fonseca, Alexandre C. B. Delbem
2013 C ed.
EMO
Robin C. Purshouse, Peter J. Fleming, Carlos M. Fonseca, Salvatore Greco, Jane Shaw
2012 conf
CCCG
Andreia P. Guerreiro, Carlos M. Fonseca, Michael T. M. Emmerich
2011 C conf
EMO
Michael T. M. Emmerich, Carlos M. Fonseca
2011 C conf
EMO
Carlos M. Fonseca, Andreia P. Guerreiro, Manuel López-Ibáñez, Luís Paquete
2011 conf
Artificial Evolution
Viviane Grunert da Fonseca, Carlos M. Fonseca
2010 J jnl
IEEE Trans. Evol. Comput.
Eduardo G. Carrano, Ricardo H. C. Takahashi, Carlos M. Fonseca, Oriane M. Neto
2010 ch.
Experimental Methods for the Analysis of Optimization Algorithms
Viviane Grunert da Fonseca, Carlos M. Fonseca
2009 conf
Hybrid and Robust Approaches to Multiobjective Optimization
Carlos M. Fonseca, Xavier Gandibleux, Pekka J. Korhonen, Luis Marti, Boris Naujoks, Lothar Thiele, Jyrki Wallenius, Eckart Zitzler
2009 B conf
IEEE Congress on Evolutionary Computation
José C. Ferreira, Carlos M. Fonseca, António Gaspar-Cunha
2009 C ed.
EMO
Matthias Ehrgott, Carlos M. Fonseca, Xavier Gandibleux, Jin-Kao Hao, Marc Sevaux
2009 J jnl
IEEE Trans. Evol. Comput.
Nicola Beume, Carlos M. Fonseca, Manuel López-Ibáñez, Luís Paquete, Jan Vahrenhold
2008 J jnl
J. Sched.
Dilip Datta, Carlos M. Fonseca, Kalyanmoy Deb
2008 A conf
GECCO
Dilip Datta, José Rui Figueira, Carlos M. Fonseca, Fernando Tavares-Pereira
2007 B conf
SMC
Eduardo G. Carrano, Carlos M. Fonseca, Ricardo H. C. Takahashi, Luciano C. A. Pimenta, Oriane M. Neto
2007 A conf
GECCO
Cristina C. Vieira, Carlos M. Fonseca
2007 C conf
EMO
Eduardo G. Carrano, Ricardo H. C. Takahashi, Carlos M. Fonseca, Oriane M. Neto
2007 C conf
EMO
Carlos M. Fonseca
2007 B conf
IEEE Congress on Evolutionary Computation
Marisol B. Correia, Carlos M. Fonseca
2007 A conf
GECCO
José C. Ferreira, Carlos M. Fonseca, António Gaspar-Cunha
2007 ch.
Evolutionary Scheduling
Dilip Datta, Kalyanmoy Deb, Carlos M. Fonseca
2007 C conf
EMO
Dilip Datta, Kalyanmoy Deb, Carlos M. Fonseca
2007 A conf
GECCO
Marisol B. Correia, Carlos M. Fonseca
2007 C conf
HIS
Carlos M. Fonseca
2006 B conf
IEEE Congress on Evolutionary Computation
Carlos M. Fonseca, Luís Paquete, Manuel López-Ibáñez
2005 B conf
Congress on Evolutionary Computation
Carlos M. Fonseca, Marisol B. Correia
2005 C conf
EMO
Carlos M. Fonseca, Viviane Grunert da Fonseca, Luís Paquete
2005 conf
Practical Approaches to Multi-Objective Optimization
Carlos M. Fonseca, Peter J. Fleming
2004 J jnl
IEEE Trans. Syst. Man Cybern. Part A
Katya Rodríguez-Vázquez, Carlos M. Fonseca, Peter J. Fleming
2003 C ed.
EMO
Carlos M. Fonseca, Peter J. Fleming, Eckart Zitzler, Kalyanmoy Deb, Lothar Thiele
2003 C conf
CCA
Pedro M. Ferreira, António E. B. Ruano, Carlos M. Fonseca
2003 J jnl
Neurocomputing
António E. B. Ruano, Peter J. Fleming, César Alexandre Teixeira, Katya Rodríguez-Vázquez, Carlos M. Fonseca
2003 J jnl
IEEE Trans. Evol. Comput.
Eckart Zitzler, Lothar Thiele, Marco Laumanns, Carlos M. Fonseca, Viviane Grunert da Fonseca
2002 A conf
GECCO
Eckart Zitzler, Marco Laumanns, Lothar Thiele, Carlos M. Fonseca, Viviane Grunert da Fonseca
2001 C conf
EMO
Viviane Grunert da Fonseca, Carlos M. Fonseca, Andreia O. Hall
2001 conf
ECC
J. M. Lima, A. B. Azevedo, N. M. Duarte, Carlos M. Fonseca, António E. B. Ruano, Peter J. Fleming
2000 B conf
CEC
N. M. Duarte, António E. B. Ruano, Carlos M. Fonseca, Peter J. Fleming
1999 B conf
CEC
K. J. Shaw, Anne L. Nortcliffe, M. Thompson, J. Love, Peter J. Fleming, Carlos M. Fonseca
1998 J jnl
IEEE Trans. Syst. Man Cybern. Part A
Carlos M. Fonseca, Peter J. Fleming
1998 J jnl
IEEE Trans. Syst. Man Cybern. Part A
Carlos M. Fonseca, Peter J. Fleming
1996 A conf
PPSN
Carlos M. Fonseca, Peter J. Fleming
1995 J jnl
Evol. Comput.
Carlos M. Fonseca, Peter J. Fleming
1993 conf
ICGA
Carlos M. Fonseca, Peter J. Fleming
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}"