Xavier Rodet

140 papers A 9B 3Misc 19Journal 18Unranked 90
YearRankTypeTitle / Venue / Authors
2013 J jnl
IEEE Trans. Speech Audio Process.
Marco Liuni, Axel Röbel, Ewa Matusiak, Marco Romito, Xavier Rodet
2013 J jnl
Speech Commun.
Gilles Degottex, Pierre Lanchantin, Axel Röbel, Xavier Rodet
2013 J jnl
IEEE Trans. Speech Audio Process.
Marcelo F. Caetano, Xavier Rodet
2012 Misc conf
ICASSP
Marcelo F. Caetano, Xavier Rodet
2012 Misc conf
ICASSP
Axel Röbel, Stefan Huber, Xavier Rodet, Gilles Degottex
2011 J jnl
CoRR
Marco Liuni, Axel Röbel, Marco Romito, Xavier Rodet
2011 J jnl
CoRR
Marco Liuni, Axel Röbel, Marco Romito, Xavier Rodet
2011 A conf
INTERSPEECH
Nicolas Obin, Pierre Lanchantin, Anne Lacheret, Xavier Rodet
2011 Misc conf
ICASSP
Gilles Degottex, Axel Röbel, Xavier Rodet
2011 Misc conf
ICASSP
Marcelo F. Caetano, Xavier Rodet
2011 A conf
INTERSPEECH
Christophe Veaux, Xavier Rodet
2011 Misc conf
ICASSP
Pierre Lanchantin, Xavier Rodet
2011 J jnl
IEEE Trans. Speech Audio Process.
Gilles Degottex, Axel Röbel, Xavier Rodet
2011 Misc conf
ICASSP
Gilles Degottex, Axel Röbel, Xavier Rodet
2011 Misc conf
ICASSP
Christophe Veaux, Xavier Rodet
2011 A conf
INTERSPEECH
Nicolas Obin, Pierre Lanchantin, Anne Lacheret, Xavier Rodet
2011 J jnl
CoRR
Marco Liuni, Axel Röbel, Marco Romito, Xavier Rodet
2011 Misc conf
ICASSP
Marco Liuni, Axel Röbel, Marco Romito, Xavier Rodet
2011 Misc conf
ICASSP
Marcelo F. Caetano, Xavier Rodet
2011 A conf
INTERSPEECH
Nicolas Obin, Anne Lacheret, Xavier Rodet
2010 Misc conf
ICASSP
Pierre Lanchantin, Gilles Degottex, Xavier Rodet
2010 conf
CMMR
Marco Liuni, Axel Röbel, Marco Romito, Xavier Rodet
2010 conf
ICMC
Marcelo F. Caetano, Xavier Rodet
2010 A conf
INTERSPEECH
Pierre Lanchantin, Xavier Rodet
2010 A conf
INTERSPEECH
Nicolas Obin, Volker Dellwo, Anne Lacheret, Xavier Rodet
2010 A conf
INTERSPEECH
Nicolas Obin, Xavier Rodet, Anne Lacheret
2010 Misc conf
ICASSP
Gilles Degottex, Axel Röbel, Xavier Rodet
2010 conf
SSW
Christophe Veaux, Pierre Lanchantin, Xavier Rodet
2010 J jnl
IEEE Trans. Speech Audio Process.
Chunghsin Yeh, Axel Röbel, Xavier Rodet
2009 A conf
INTERSPEECH
Nicolas Obin, Xavier Rodet, Anne Lacheret-Dujour
2009 Misc conf
ICASSP
Fernando Villavicencio, Axel Röbel, Xavier Rodet
2009 conf
ICMC
Marcelo F. Caetano, Xavier Rodet
2009 J jnl
IEEE Trans. Speech Audio Process.
Arie Livshin, Xavier Rodet
2008 A conf
INTERSPEECH
Nicolas Obin, Anne Lacheret-Dujour, Christophe Veaux, Xavier Rodet, Anne-Catherine Simon
2008 J jnl
Comput. Music. J.
Miroslav Zivanovic, Axel Röbel, Xavier Rodet
2008 B conf
LREC
Pierre Lanchantin, Andrew C. Morris, Xavier Rodet, Christophe Veaux
2008 Misc conf
ICASSP
Fernando Villavicencio, Axel Röbel, Xavier Rodet
2008 Misc conf
ICASSP
Nicolas Obin, Xavier Rodet, Anne Lacheret-Dujour
2008 J jnl
Trait. Autom. des Langues
Grégory Beller, Christophe Veaux, Gilles Degottex, Nicolas Obin, Pierre Lanchantin, Xavier Rodet
2008 B conf
LREC
Christophe Veaux, Grégory Beller, Xavier Rodet
2008 conf
ISMIR
Geoffroy Peeters, David Fenech, Xavier Rodet
2008 Misc conf
ICASSP
Julien Bloit, Xavier Rodet
2007 conf
ICASSP (1)
Fernando Villavicencio, Axel Röbel, Xavier Rodet
2007 conf
EvoWorkshops
Grégoire Carpentier, Damien Tardieu, Gérard Assayag, Xavier Rodet, Emmanuel Saint-James
2007 conf
ICMC
Damien Tardieu, Grégoire Carpentier, Xavier Rodet
2007 J jnl
Pattern Recognit. Lett.
Axel Röbel, Fernando Villavicencio, Xavier Rodet
2006 conf
ICASSP (5)
Hagen Kaprykowsky, Xavier Rodet
2006 conf
ICASSP (1)
Fernando Villavicencio, Axel Röbel, Xavier Rodet
2006 J jnl
IEEE Trans. Speech Audio Process.
Ixone Arroabarren, Xavier Rodet, Alfonso Carlosena
2006 conf
ISMIR
Arie Livshin, Xavier Rodet
2005 conf
ICASSP (3)
Chunghsin Yeh, Axel Röbel, Xavier Rodet
2005 conf
ICMC
Axel Röbel, Xavier Rodet
2005 conf
International Conference on Virtual Storytelling
Roland Cahen, Xavier Rodet, Jean-Philippe Lambert
2005 conf
NIME
Xavier Rodet, Jean-Philippe Lambert, Roland Cahen, Thomas Gaudy, Florian Gosselin, Fabrice Guédy, Pascal Mobuchon
2005 conf
ICMC
Xavier Rodet, Jean-Philippe Lambert, Roland Cahen, Florian Gosselin, Pascal Mobuchon
2004 conf
EUSIPCO
Miroslav Zivanovic, Axel Röbel, Xavier Rodet
2004 conf
ICMC
Xavier Rodet, Joseph Escribe, Sébastien Durigon
2004 conf
ICMC
Arie Livshin, Xavier Rodet
2004 conf
ISMIR
Emmanuel Vincent, Xavier Rodet
2004 conf
ICA
Emmanuel Vincent, Xavier Rodet
2004 conf
ICMC
Matthew Wright, Roger B. Dannenberg, Stephen Travis Pope, Xavier Rodet, Xavier Serra, David Wessel
2004 conf
ICMC
Axel Roebel, Miroslav Zivanovic, Xavier Rodet
2004 conf
ICMC
Niels Bogaards, Axel Röbel, Xavier Rodet
2004 conf
ICA
Emmanuel Vincent, Xavier Rodet
2003 conf
ICMC
Wim D'haes, Xavier Rodet
2003 conf
ISMIR
Ferréol Soulez, Xavier Rodet, Diemo Schwarz
2003 conf
ICASSP (5)
Ixone Arroabarren, Miroslav Zivanovic, Xavier Rodet, Alfonso Carlosena
2003 J jnl
Pattern Recognit. Lett.
Wim D'haes, Dirk Van Dyck, Xavier Rodet
2003 conf
ICMC
Michael Clarke, Xavier Rodet
2003 conf
ICMC
Geoffroy Peeters, Xavier Rodet
2003 conf
ICMC
Arie Livshin, Geoffroy Peeters, Xavier Rodet
2003 conf
ISMIR
Arie Livshin, Xavier Rodet
2002 conf
ICMC
Geoffroy Peeters, Xavier Rodet
2002 conf
ISMIR
Geoffroy Peeters, Amaury La Burthe, Xavier Rodet
2001 conf
ICMC
Wim D'haes, Xavier Rodet
2001 conf
ICMC
Xavier Rodet, Florent Jaillet
2001 conf
ICMC
Marcelo M. Wanderley, Marie-Hélène Serra, Marc Battier, Xavier Rodet
2001 conf
ICMC
Christophe Vergez, Xavier Rodet
2001 J jnl
Int. J. Bifurc. Chaos
Christophe Vergez, Xavier Rodet
2000 conf
ICMC
Christophe Vergez, Xavier Rodet
2000 conf
ICMC
Marcelo M. Wanderley, Jean-Philippe Viollet, Fabrice Isart, Xavier Rodet
2000 conf
ICMC
Norbert Schnell, Geoffroy Peeters, Serge Lemouton, Phillippe Manoury, Xavier Rodet
1999 conf
ICMC
Stefania Serafin, Christophe Vergez, Xavier Rodet
1999 conf
ICMC
Stefania Serafin, Richard Dudas, Marcelo M. Wanderley, Xavier Rodet
1999 conf
ICMC
Thomas Hélie, Christophe Vergez, Jean Lévine, Xavier Rodet
1999 J jnl
Comput. Music. J.
Xavier Rodet, Christophe Vergez
1999 J jnl
Comput. Music. J.
Xavier Rodet, Christophe Vergez
1999 conf
ICMC
Geoffroy Peeters, Xavier Rodet
1999 conf
ICMC
Diemo Schwarz, Xavier Rodet
1998 conf
ICMC
Stéphane Rossignol, Xavier Rodet, Joël Soumagne, Jean-Louis Collete, Philippe Depalle
1998 conf
ICMC
Matthew Wright, Amar Chaudhary, Adrian Freed, David Wessel, Xavier Rodet, Dominique Virolle, Rolf Wöhrmann, Xavier Serra
1998 B conf
SMC
Shlomo Dubnov, Xavier Rodet
1998 conf
ICMC
Shlomo Dubnov, Xavier Rodet
1997 conf
ICMC
Christophe Vergez, Xavier Rodet
1997 conf
ICMC
Shlomo Dubnov, Xavier Rodet
1997 conf
ICMC
Xavier Rodet, Adrien Lefèvre
1996 conf
ICMC
Xavier Rodet, Adrien Lefèvre
1996 conf
ICMC
Xavier Rodet, Christophe Vergez
1996 conf
ICMC
Rémi Gribonval, Philippe Depalle, Xavier Rodet, Emmanuel Bacry, Stéphane Mallat
1996 conf
ICMC
Xavier Rodet, Dominique François, Guillaume Levy
1995 conf
ICMC
Robin Bargar, Bryan Holloway, Xavier Rodet, Chris Hartman
1995 conf
ICMC
Xavier Rodet
1994 conf
ICMC
Philippe Depalle, Guillermo García, Xavier Rodet
1994 conf
ICMC
Michael Goodwin, Xavier Rodet
1994 conf
ICMC
Adrian Freed, Mark Goldstein, Michael Goodwin, Michael Lee, Keith A. McMillen, Xavier Rodet, David Wessel, Matthew Wright
1994 conf
ICMC
Xavier Rodet
1993 conf
ICMC
Philippe Depalle, Guillermo García, Xavier Rodet
1993 conf
ICMC
Xavier Rodet
1993 conf
ICASSP (1)
Boris Doval, Xavier Rodet
1993 conf
ICMC
Philippe Depalle, Xavier Rodet, Thierry Galas, Gerhard Eckel
1993 ch.
Chua's Circuit
Xavier Rodet
1993 J jnl
J. Circuits Syst. Comput.
Xavier Rodet
1993 conf
ICMC
Adrian Freed, Xavier Rodet, Philippe Depalle
1993 conf
ICASSP (1)
Philippe Depalle, Guillermo García, Xavier Rodet
1992 conf
ICMC
Philippe Depalle, Xavier Rodet
1992 conf
ICMC
Denis Matignon, Philippe Depalle, Xavier Rodet
1991 Misc conf
ICASSP
Boris Doval, Xavier Rodet
1991 conf
ICMC
Xavier Rodet, Boris Doval
1991 conf
EUROSPEECH
Thierry Galas, Xavier Rodet
1990 conf
ICSLP
Thierry Galas, Xavier Rodet
1990 conf
ICMC
Thierry Galas, Xavier Rodet
1990 conf
SSW
Philippe Depalle, Xavier Rodet, Gilles Poirot
1990 conf
ICSLP
Claude Montacié, Marie-José Caraty, Xavier Rodet
1990 conf
ICMC
Philippe Depalle, Xavier Rodet
1989 conf
ICMC
Jean Laroche, Xavier Rodet
1989 conf
EUROSPEECH
Marie-José Caraty, J. C. Richard, Xavier Rodet
1988 conf
ICMC
Xavier Rodet, Philippe Depalle, Gilles Poirot
1988 conf
ICMC
Xavier Rodet, Gerhard Eckel
1987 conf
ICMC
Gerhard Eckel, Xavier Rodet, Yves Potard
1987 conf
ICMC
Jean-Marie Adrien, René Caussé, Xavier Rodet
1987 conf
ECST
Xavier Rodet, Philippe Depalle, Gilles Poirot
1986 conf
ICMC
Lee Boynton, Jacques Duthen, Yves Potard, Xavier Rodet
1985 conf
ICMC
Xavier Rodet, Philippe Depalle
1985 conf
ICMC
Jean-Marie Adrien, Xavier Rodet
1985 Misc conf
ICASSP
Xavier Rodet, Philippe Depalle
1984 conf
LISP and Functional Programming
Pierre Cointe, Xavier Rodet
1982 conf
ICMC
Xavier Rodet, Jean-Baptiste Barrière, Pierre Cointe, Yves Potard
1981 conf
ICMC
Jean-Baptiste Barrière, Jean Holleville, Yves Potard, Xavier Rodet
1980 Misc conf
ICASSP
Michel Chafcouloff, Gérard Chollet, Paul P. Durand, Jacques Guizol, Xavier Rodet
1979 Misc conf
ICASSP
Xavier Rodet, Jean-Luc Delatre
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}"