Hadrien Cambazard

60 papers A* 7A 11B 7C 2Journal 27Unranked 5
YearRankTypeTitle / Venue / Authors
2025 J jnl
Oper. Res. Lett.
Paul Revenant, Hadrien Cambazard, Nicolas Catusse
2025 J jnl
Artif. Intell.
Guillaume Claus, Hadrien Cambazard, Hugo Apeloig, Pierre Hoppenot
2022 J jnl
CoRR
Lucie Pansart, Hadrien Cambazard, Nicolas Catusse
2022 J jnl
CoRR
Nicolas Catusse, Hadrien Cambazard, Nadia Brauner, Bernard Penz, Florian Fontan
2022 J jnl
4OR
Hadrien Cambazard, Nicolas Catusse, Nadia Brauner, Pierre Lemaire
2021 A* conf
SoCG
Hadrien Cambazard, Nicolas Catusse
2020 J jnl
Eur. J. Oper. Res.
Olivier Briant, Hadrien Cambazard, Diego Cattaruzza, Nicolas Catusse, Anne-Laure Ladier, Maxime Ogier
2020 J jnl
CoRR
Hadrien Cambazard, Nicolas Catusse
2020 A conf
ECAI
Guillaume Claus, Hadrien Cambazard, Vincent Jost
2020 A* conf
IJCAI
Florian Pommerening, Gabriele Röger, Malte Helmert, Hadrien Cambazard, Louis-Martin Rousseau, Domenico Salvagnin
2020 A conf
ECAI
Lucie Pansart, Hadrien Cambazard, Nicolas Catusse
2020 A conf
ECAI
Luc Libralesso, Abdel-Malik Bouhassoun, Hadrien Cambazard, Vincent Jost
2019 J jnl
CoRR
Grigori German, Hadrien Cambazard, Jean-Philippe Gayon, Bernard Penz
2019 A* conf
ICAPS
Florian Pommerening, Gabriele Röger, Malte Helmert, Hadrien Cambazard, Louis-Martin Rousseau, Domenico Salvagnin
2019 J jnl
CoRR
Luc Libralesso, Abdel-Malik Bouhassoun, Hadrien Cambazard, Vincent Jost
2018 J jnl
Comput. Oper. Res.
Lucie Pansart, Nicolas Catusse, Hadrien Cambazard
2018 J jnl
Eur. J. Oper. Res.
Hadrien Cambazard, Nicolas Catusse
2017 A conf
CP
Grigori German, Olivier Briant, Hadrien Cambazard, Vincent Jost
2017 J jnl
CoRR
Lucie Pansart, Nicolas Catusse, Hadrien Cambazard
2016 A* conf
IJCAI
Nicolas Catusse, Hadrien Cambazard, Nadia Brauner, Pierre Lemaire, Bernard Penz, Anne-Marie Lagrange, Pascal Rubini
2016 A* conf
AAAI
Sylvain Ducomman, Hadrien Cambazard, Bernard Penz
2015 J jnl
CoRR
Hadrien Cambazard, Deepak Mehta, Barry O'Sullivan, Helmut Simonis
2015 J jnl
CoRR
Hadrien Cambazard, Nicolas Catusse
2015 J jnl
Constraints An Int. J.
Hadrien Cambazard, Jean-Guillaume Fages
2014 J jnl
AI Mag.
Hadrien Cambazard, Barry O'Sullivan, Helmut Simonis
2014 B conf
CCGRID
Milan De Cauwer, Deepak Mehta, Barry O'Sullivan, Helmut Simonis, Hadrien Cambazard
2013 A* conf
ICAPS
Arnaud Malapert, Hadrien Cambazard, Christelle Guéret, Narendra Jussien, André Langevin, Louis-Martin Rousseau
2013 A conf
CP
Hadrien Cambazard, Deepak Mehta, Barry O'Sullivan, Helmut Simonis
2013 conf
GECON
Hadrien Cambazard, Deepak Mehta, Barry O'Sullivan, Helmut Simonis
2013 C conf
IAAI
Hadrien Cambazard, Barry O'Sullivan, Helmut Simonis
2012 B conf
CPAIOR
Hadrien Cambazard, Deepak Mehta, Barry O'Sullivan, Luis Quesada
2012 A conf
CP
Hadrien Cambazard, Bernard Penz
2012 J jnl
Discret. Appl. Math.
Hadrien Cambazard, Eoin O'Mahony, Barry O'Sullivan
2012 J jnl
INFORMS J. Comput.
Arnaud Malapert, Hadrien Cambazard, Christelle Guéret, Narendra Jussien, André Langevin, Louis-Martin Rousseau
2012 J jnl
Ann. Oper. Res.
Hadrien Cambazard, Emmanuel Hebrard, Barry O'Sullivan, Alexandre Papadopoulos
2011 J jnl
CoRR
Hadrien Cambazard, Deepak Mehta, Barry O'Sullivan, Luis Quesada, Marco Ruffini, David B. Payne, Linda Doyle
2011 B conf
ICTAI
Hadrien Cambazard, Deepak Mehta, Barry O'Sullivan, Luis Quesada, Marco Ruffini, David B. Payne, Linda Doyle
2011 J jnl
Ann. Oper. Res.
Hadrien Cambazard, John Horan, Eoin O'Mahony, Barry O'Sullivan
2010 J jnl
Constraints An Int. J.
Hadrien Cambazard, Barry O'Sullivan
2010 B conf
CPAIOR
Hadrien Cambazard, Eoin O'Mahony, Barry O'Sullivan
2010 A conf
ECAI
Hadrien Cambazard, Tarik Hadzic, Barry O'Sullivan
2010 A conf
CP
Hadrien Cambazard, Barry O'Sullivan
2009 B conf
CPAIOR
Hadrien Cambazard, Eoin O'Mahony, Barry O'Sullivan
2009 J jnl
Comput. Math. Appl.
Hadrien Cambazard, Barry O'Sullivan, Barbara M. Smith
2008 A* conf
AAAI
Hadrien Cambazard, John Horan, Eoin O'Mahony, Barry O'Sullivan
2008 B conf
CPAIOR
Hadrien Cambazard, John Horan, Eoin O'Mahony, Barry O'Sullivan
2008 A conf
CP
Hadrien Cambazard, Barry O'Sullivan
2008 J jnl
Constraints An Int. J.
Hadrien Cambazard, Barry O'Sullivan
2008 J jnl
J. Syst. Softw.
Pierre-Emmanuel Hladik, Hadrien Cambazard, Anne-Marie Déplanche, Narendra Jussien
2007 conf
SARA
Hadrien Cambazard, Barry O'Sullivan
2007 conf
LION
Hadrien Cambazard, Narendra Jussien
2007 conf
ExaCt
Hadrien Cambazard, Narendra Jussien
2006 J jnl
RAIRO Oper. Res.
Hadrien Cambazard, Narendra Jussien
2006 J jnl
Constraints An Int. J.
Hadrien Cambazard, Narendra Jussien
2006
Hadrien Cambazard
2005 B conf
CPAIOR
Hadrien Cambazard, Narendra Jussien
2005 A conf
CP
Hadrien Cambazard, Narendra Jussien
2005 conf
SOFTVIS
Mohammad Ghoniem, Hadrien Cambazard, Jean-Daniel Fekete, Narendra Jussien
2004 A conf
CP
Hadrien Cambazard, Pierre-Emmanuel Hladik, Anne-Marie Déplanche, Narendra Jussien, Yvon Trinquet
2004 C conf
PATAT
Hadrien Cambazard, Fabien Demazeau, Narendra Jussien, Philippe David
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