Carsten Witt

192 papers A* 3A 53B 7C 1Journal 92Unranked 28
YearRankTypeTitle / Venue / Authors
2026 J jnl
Algorithmica
Martin S. Krejca, Carsten Witt
2026 B conf
EvoCOP
Sumit Adak, Carsten Witt
2026 J jnl
Artif. Intell.
Sumit Adak, Carsten Witt
2026 A* conf
AAAI
Yuxuan Ma, Valentino Santucci, Carsten Witt
2025 J jnl
CoRR
Sumit Adak, Carsten Witt
2025 conf
EvoCOP@EvoStar
Sumit Adak, Carsten Witt
2025 J jnl
Dagstuhl Reports
Josu Ceberio Uribe, Benjamin Doerr, John A. W. McCall, Carsten Witt, Marcus Schmidbauer
2025 A conf
GECCO
Sumit Adak, Carsten Witt
2025 J jnl
CoRR
Sumit Adak, Carsten Witt
2025 A conf
FOGA
Martin S. Krejca, Frank Neumann, Carsten Witt
2025 J jnl
Evol. Comput.
Frank Neumann, Carsten Witt
2025 A conf
FOGA
Sumit Adak, Carsten Witt
2025 J jnl
Algorithmica
Frank Neumann, Dirk Sudholt, Carsten Witt
2025 J jnl
CoRR
Yuxuan Ma, Valentino Santucci, Carsten Witt
2024 J jnl
CoRR
Martin S. Krejca, Carsten Witt
2024 A conf
GECCO
Martin S. Krejca, Carsten Witt
2024 A conf
GECCO
Paul Fischer, John Alasdair Warwicker, Carsten Witt
2024 J jnl
CoRR
Sumit Adak, Carsten Witt
2024 conf
PPSN (3)
Sumit Adak, Carsten Witt
2024 J jnl
Algorithmica
Benjamin Doerr, Amirhossein Rajabi, Carsten Witt
2024 conf
PPSN (3)
Frank Neumann, Carsten Witt
2024 J jnl
CoRR
Frank Neumann, Carsten Witt
2024 J jnl
Algorithmica
Amirhossein Rajabi, Carsten Witt
2023 A conf
GECCO
Frank Neumann, Carsten Witt
2023 J jnl
CoRR
Frank Neumann, Carsten Witt
2023 A conf
ECAI
Frank Neumann, Carsten Witt
2023 J jnl
CoRR
Frank Neumann, Carsten Witt
2023 A conf
FOGA
Paul Fischer, Emil Lundt Larsen, Carsten Witt
2023 J jnl
CoRR
Paul Fischer, Emil Lundt Larsen, Carsten Witt
2023 A conf
GECCO
Benjamin Doerr, Taha El Ghazi El Houssaini, Amirhossein Rajabi, Carsten Witt
2023 J jnl
CoRR
Benjamin Doerr, Taha El Ghazi El Houssaini, Amirhossein Rajabi, Carsten Witt
2023 J jnl
Theor. Comput. Sci.
Carsten Witt
2023 J jnl
Evol. Comput.
Amirhossein Rajabi, Carsten Witt
2022 J jnl
Dagstuhl Reports
Josu Ceberio Uribe, Benjamin Doerr, Carsten Witt, Vicente P. Soloviev
2022 A* conf
IJCAI
Frank Neumann, Carsten Witt
2022 conf
PPSN (2)
Frank Neumann, Carsten Witt
2022 J jnl
CoRR
Frank Neumann, Carsten Witt
2022 J jnl
Algorithmica
Amirhossein Rajabi, Carsten Witt
2022 J jnl
CoRR
Benjamin Doerr, Amirhossein Rajabi, Carsten Witt
2022 A conf
GECCO
Benjamin Doerr, Amirhossein Rajabi, Carsten Witt
2022 J jnl
CoRR
Frank Neumann, Dirk Sudholt, Carsten Witt
2022 A conf
GECCO
Frank Neumann, Dirk Sudholt, Carsten Witt
2022 J jnl
Algorithmica
Pietro S. Oliveto, Dirk Sudholt, Carsten Witt
2021 J jnl
Algorithmica
Frank Neumann, Mojgan Pourhassan, Carsten Witt
2021 J jnl
Algorithmica
Andrew M. Sutton, Carsten Witt
2021 J jnl
ACM Trans. Evol. Learn. Optim.
Dogan Corus, Andrei Lissovoi, Pietro S. Oliveto, Carsten Witt
2021 J jnl
CoRR
Dogan Corus, Andrei Lissovoi, Pietro S. Oliveto, Carsten Witt
2021 A conf
FOGA
Carsten Witt
2021 J jnl
Algorithmica
Benjamin Doerr, Carsten Witt, Jing Yang
2021 J jnl
CoRR
Frank Neumann, Carsten Witt
2021 J jnl
CoRR
Amirhossein Rajabi, Carsten Witt
2021 B conf
EvoCOP
Amirhossein Rajabi, Carsten Witt
2021 J jnl
CoRR
Amirhossein Rajabi, Carsten Witt
2021 A conf
GECCO
Amirhossein Rajabi, Carsten Witt
2021 J jnl
Comb. Probab. Comput.
Per Kristian Lehre, Carsten Witt
2021 J jnl
Algorithmica
Johannes Lengler, Dirk Sudholt, Carsten Witt
2020 A conf
GECCO
Pietro S. Oliveto, Dirk Sudholt, Carsten Witt
2020 conf
PPSN (1)
Amirhossein Rajabi, Carsten Witt
2020 J jnl
CoRR
Amirhossein Rajabi, Carsten Witt
2020 conf
PPSN (2)
Timo Kötzing, Carsten Witt
2020 J jnl
CoRR
Timo Kötzing, Carsten Witt
2020 J jnl
CoRR
Frank Neumann, Mojgan Pourhassan, Carsten Witt
2020 J jnl
Theor. Comput. Sci.
Martin S. Krejca, Carsten Witt
2020 J jnl
CoRR
Amirhossein Rajabi, Carsten Witt
2020 A conf
GECCO
Amirhossein Rajabi, Carsten Witt
2020 ch.
Theory of Evolutionary Computation
Martin S. Krejca, Carsten Witt
2020 conf
GECCO Companion
Carsten Witt
2019 A conf
GECCO
Frank Neumann, Mojgan Pourhassan, Carsten Witt
2019 A conf
GECCO
Andrew M. Sutton, Carsten Witt
2019 J jnl
Algorithmica
Dirk Sudholt, Carsten Witt
2019 J jnl
CoRR
Hsien-Kuei Hwang, Carsten Witt
2019 A conf
FOGA
Hsien-Kuei Hwang, Carsten Witt
2019 J jnl
Algorithmica
Benjamin Doerr, Christian Gießen, Carsten Witt, Jing Yang
2019 conf
GECCO (Companion)
Carsten Witt
2019 J jnl
Algorithmica
Carsten Witt
2018 A conf
GECCO
Carsten Witt
2018 A conf
GECCO
Johannes Lengler, Dirk Sudholt, Carsten Witt
2018 J jnl
Algorithmica
Christian Gießen, Carsten Witt
2018 J jnl
CoRR
Benjamin Doerr, Carsten Witt, Jing Yang
2018 A conf
GECCO
Benjamin Doerr, Carsten Witt, Jing Yang
2018 J jnl
Algorithmica
Andrei Lissovoi, Carsten Witt
2018 J jnl
CoRR
Martin S. Krejca, Carsten Witt
2018 conf
GECCO (Companion)
Carsten Witt
2017 J jnl
Algorithmica
Andrei Lissovoi, Carsten Witt
2017 J jnl
Soft Comput.
Benjamin Doerr, Paul Fischer, Astrid Hilbert, Carsten Witt
2017 J jnl
CoRR
Martin Ebbesen, Paul Fischer, Carsten Witt
2017 A conf
FOGA
Martin S. Krejca, Carsten Witt
2017 A ed.
FOGA
Christian Igel, Dirk Sudholt, Carsten Witt
2017 A conf
GECCO
Benjamin Doerr, Christian Gießen, Carsten Witt, Jing Yang
2017 J jnl
CoRR
Benjamin Doerr, Christian Gießen, Carsten Witt, Jing Yang
2017 J jnl
Algorithmica
Christian Gießen, Carsten Witt
2017 J jnl
CoRR
Carsten Witt
2017 A conf
GECCO
Carsten Witt
2016 J jnl
Algorithmica
Benjamin Doerr, Carsten Witt
2016 J jnl
Algorithmica
Andrei Lissovoi, Carsten Witt
2016 A conf
GECCO
Christian Gießen, Carsten Witt
2016 A conf
GECCO
Andrei Lissovoi, Carsten Witt
2016 A conf
GECCO
Dirk Sudholt, Carsten Witt
2016 J jnl
CoRR
Dirk Sudholt, Carsten Witt
2015 A conf
FOGA
Timo Kötzing, Andrei Lissovoi, Carsten Witt
2015 J jnl
Theor. Comput. Sci.
Pietro S. Oliveto, Carsten Witt
2015 A* conf
IJCAI
Frank Neumann, Carsten Witt
2015 J jnl
CoRR
Frank Neumann, Carsten Witt
2015 A conf
GECCO
Andrei Lissovoi, Carsten Witt
2015 A conf
GECCO
Christian Gießen, Carsten Witt
2015 J jnl
Theor. Comput. Sci.
Andrei Lissovoi, Carsten Witt
2014 conf
GECCO (Companion)
Carsten Witt
2014 B conf
ISAAC
Per Kristian Lehre, Carsten Witt
2014 J jnl
Inf. Process. Lett.
Carsten Witt
2014 A conf
GECCO
Andrei Lissovoi, Carsten Witt
2014 J jnl
Theor. Comput. Sci.
Pietro S. Oliveto, Carsten Witt
2014 A conf
GECCO
Carsten Witt
2013 A conf
GECCO
Benjamin Doerr, Thomas Jansen, Carsten Witt, Christine Zarges
2013 conf
GECCO (Companion)
Frank Neumann, Carsten Witt
2013 conf
GECCO (Companion)
Benjamin Doerr, Paul Fischer, Astrid Hilbert, Carsten Witt
2013 J jnl
CoRR
Per Kristian Lehre, Carsten Witt
2013 A conf
GECCO
Pietro S. Oliveto, Carsten Witt
2013 A conf
GECCO
Andrei Lissovoi, Carsten Witt
2013 J jnl
CoRR
Carsten Witt
2013 J jnl
Comb. Probab. Comput.
Carsten Witt
2013 A conf
FOGA
Benjamin Doerr, Dirk Sudholt, Carsten Witt
2012 J jnl
Theor. Comput. Sci.
Carsten Witt
2012 conf
GECCO (Companion)
Frank Neumann, Carsten Witt
2012 J jnl
Algorithmica
Per Kristian Lehre, Carsten Witt
2012 J jnl
CoRR
Pietro S. Oliveto, Carsten Witt
2012 A conf
GECCO
Pietro S. Oliveto, Carsten Witt
2012 A conf
STACS
Carsten Witt
2012 J jnl
Swarm Intell.
Timo Kötzing, Frank Neumann, Heiko Röglin, Carsten Witt
2012 J jnl
Algorithmica
Anne Auger, Carsten Witt
2011 B conf
FCT
Martin Ebbesen, Paul Fischer, Carsten Witt
2011 J jnl
CoRR
Per Kristian Lehre, Carsten Witt
2011 J jnl
Theor. Comput. Sci.
Benjamin Doerr, Frank Neumann, Dirk Sudholt, Carsten Witt
2011 A conf
GECCO
Benjamin Doerr, Mahmoud Fouz, Carsten Witt
2011 J jnl
Algorithmica
Pietro S. Oliveto, Carsten Witt
2011 ch.
Theory of Randomized Search Heuristics
Carsten Witt
2011 conf
GECCO (Companion)
Carsten Witt
2011 J jnl
CoRR
Carsten Witt
2010 conf
Theory of Evolutionary Algorithms
Anne Auger, Jonathan L. Shapiro, L. Darrell Whitley, Carsten Witt
2010 A conf
GECCO
Frank Neumann, Dirk Sudholt, Carsten Witt
2010 J jnl
Theor. Comput. Sci.
Frank Neumann, Carsten Witt
2010 J jnl
Evol. Comput.
Tobias Friedrich, Jun He, Nils Hebbinghaus, Frank Neumann, Carsten Witt
2010 book
Bioinspired Computation in Combinatorial Optimization
Frank Neumann, Carsten Witt
2010 J jnl
Electron. Colloquium Comput. Complex.
Per Kristian Lehre, Carsten Witt
2010 A conf
GECCO
Per Kristian Lehre, Carsten Witt
2010 A conf
GECCO
Benjamin Doerr, Mahmoud Fouz, Carsten Witt
2010 J jnl
Theor. Comput. Sci.
Dirk Sudholt, Carsten Witt
2010 conf
ANTS Conference
Timo Kötzing, Frank Neumann, Heiko Röglin, Carsten Witt
2010 ed.
Theory of Evolutionary Algorithms
Anne Auger, Jonathan L. Shapiro, L. Darrell Whitley, Carsten Witt
2010 conf
GECCO (Companion)
Carsten Witt
2009 J jnl
Evol. Comput.
Tobias Friedrich, Jun He, Nils Hebbinghaus, Frank Neumann, Carsten Witt
2009 J jnl
Evol. Comput.
Tobias Friedrich, Pietro S. Oliveto, Dirk Sudholt, Carsten Witt
2009 J jnl
Swarm Intell.
Frank Neumann, Dirk Sudholt, Carsten Witt
2009 ch.
Innovations in Swarm Intelligence
Frank Neumann, Dirk Sudholt, Carsten Witt
2009 C conf
TAMC
Carsten Witt
2009 J jnl
Evol. Comput.
Thomas Jansen, Melanie Schmidt, Dirk Sudholt, Carsten Witt, Christine Zarges
2009 J jnl
Algorithmica
Frank Neumann, Carsten Witt
2009 A conf
GECCO
Frank Neumann, Pietro S. Oliveto, Carsten Witt
2009 conf
GECCO (Companion)
Carsten Witt
2009 A conf
FOGA
Carsten Witt
2008 conf
Theory of Evolutionary Algorithms
Dirk V. Arnold, Anne Auger, Carsten Witt, Jonathan E. Rowe
2008 conf
Theory of Evolutionary Algorithms
Dirk V. Arnold, Anne Auger, Jonathan E. Rowe, Carsten Witt
2008 J jnl
Theor. Comput. Sci.
Carsten Witt
2008 conf
ANTS Conference
Frank Neumann, Dirk Sudholt, Carsten Witt
2008 conf
Theory of Evolutionary Algorithms
Dirk Sudholt, Carsten Witt
2008 A conf
GECCO
Dirk Sudholt, Carsten Witt
2008 A conf
PPSN
Pietro S. Oliveto, Carsten Witt
2008 A conf
GECCO
Tobias Friedrich, Pietro S. Oliveto, Dirk Sudholt, Carsten Witt
2008 ed.
Theory of Evolutionary Algorithms
Dirk V. Arnold, Anne Auger, Jonathan E. Rowe, Carsten Witt
2008 conf
GECCO (Companion)
Carsten Witt
2007 J jnl
Evol. Comput.
Jun He, Colin R. Reeves, Carsten Witt, Xin Yao
2007 conf
LION
Frank Neumann, Carsten Witt
2007 J jnl
Electron. Colloquium Comput. Complex.
Tobias Friedrich, Jun He, Nils Hebbinghaus, Frank Neumann, Carsten Witt
2007 A conf
GECCO
Tobias Friedrich, Nils Hebbinghaus, Frank Neumann, Jun He, Carsten Witt
2007 J jnl
it Inf. Technol.
Jörn Mehnen, Thomas Michelitsch, Carsten Witt
2007 conf
SLS
Frank Neumann, Dirk Sudholt, Carsten Witt
2007 B conf
IEEE Congress on Evolutionary Computation
Tobias Friedrich, Jun He, Nils Hebbinghaus, Frank Neumann, Carsten Witt
2007 A conf
GECCO
Benjamin Doerr, Frank Neumann, Dirk Sudholt, Carsten Witt
2006 J jnl
Electron. Colloquium Comput. Complex.
Frank Neumann, Carsten Witt
2006 conf
Theory of Evolutionary Algorithms
Frank Neumann, Carsten Witt
2006 B conf
ISAAC
Frank Neumann, Carsten Witt
2006 J jnl
Electron. Colloquium Comput. Complex.
Frank Neumann, Carsten Witt
2006 J jnl
Evol. Comput.
Carsten Witt
2005 J jnl
Comb. Probab. Comput.
Ingo Wegener, Carsten Witt
2005 J jnl
J. Discrete Algorithms
Ingo Wegener, Carsten Witt
2005 A conf
GECCO
Jens Jägersküpper, Carsten Witt
2005 A conf
STACS
Carsten Witt
2004 conf
GECCO (1)
Carsten Witt
2004 ch.
Ausgezeichnete Informatikdissertationen
Carsten Witt
2004
Carsten Witt
2003 A conf
GECCO
Ingo Wegener, Carsten Witt
2003 B conf
IEEE Congress on Evolutionary Computation
Carsten Witt
2001 conf
RANDOM-APPROX
Susanne Albers, Carsten Witt
redb/extractors/decompiler/apk/jadx_wrapper.py
← Index redb/extractors/decompiler/apk/jadx_wrapper.py python
"""JADX decompiler subprocess wrapper.

Manages JADX subprocess execution for Java decompilation,
following the CAPA extractor subprocess pattern.
"""

import os
import re
import signal
import subprocess
from typing import Dict, Optional


class JADXDecompiler:
    """Subprocess wrapper for JADX Java decompilation."""

    def __init__(self, jadx_path: str = None, timeout: int = None, log=None):
        self.jadx_path = jadx_path or os.getenv("JADX_PATH", "jadx")
        self.timeout = timeout or int(os.getenv("JADX_TIMEOUT", "300"))
        self.log = log

    def decompile(self, apk_path: str, output_dir: str) -> bool:
        """Run JADX decompilation on an APK file.

        Returns True on success, False on failure.
        """
        cmd = [
            self.jadx_path,
            "--no-res",
            "--no-imports",
            "--threads-count", "2",
            "--output-dir", 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"JADX returned non-zero exit code {process.returncode}: "
                            f"{stderr[:500] if stderr else 'no stderr'}"
                        )
                    # JADX may still produce partial output on non-zero exit
                    return os.path.isdir(os.path.join(output_dir, "sources"))
                return True

            except subprocess.TimeoutExpired:
                if self.log:
                    self.log.error(
                        f"JADX timed out after {self.timeout}s"
                    )
                # Kill the process group
                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"JADX not found at '{self.jadx_path}'. "
                    "Install JADX or set JADX_PATH env var."
                )
            return False
        except Exception as e:
            if self.log:
                self.log.error(f"JADX execution error: {e}")
            return False

    def parse_java_methods(self, output_dir: str) -> Dict[str, str]:
        """Parse JADX output into per-method Java source.

        Returns dict keyed by 'package.ClassName.methodName(ParamType1, ParamType2)'.
        """
        sources_dir = os.path.join(output_dir, "sources")
        if not os.path.isdir(sources_dir):
            return {}

        methods = {}
        for root, _dirs, files in os.walk(sources_dir):
            for fname in files:
                if not fname.endswith(".java"):
                    continue
                fpath = os.path.join(root, fname)
                try:
                    with open(fpath, "r", encoding="utf-8", errors="replace") as f:
                        content = f.read()

                    # Derive the fully qualified class name from file path
                    rel_path = os.path.relpath(fpath, sources_dir)
                    class_fqn = rel_path.replace(os.sep, ".").replace("/", ".")
                    if class_fqn.endswith(".java"):
                        class_fqn = class_fqn[:-5]

                    file_methods = self._extract_methods_from_java(
                        content, class_fqn
                    )
                    methods.update(file_methods)

                except Exception:
                    continue

        return methods

    def _extract_methods_from_java(
        self, source: str, class_fqn: str
    ) -> Dict[str, str]:
        """Extract individual methods from a Java source file.

        Uses brace-depth tracking to find method boundaries.
        """
        methods = {}
        lines = source.split("\n")
        i = 0

        while i < len(lines):
            line = lines[i]
            match = self._is_method_declaration(line)
            if match:
                method_name, param_types = match
                # Track brace depth to find method end
                start_line = i
                brace_depth = 0
                found_open = False

                for j in range(i, len(lines)):
                    for ch in lines[j]:
                        if ch == "{":
                            brace_depth += 1
                            found_open = True
                        elif ch == "}":
                            brace_depth -= 1

                    if found_open and brace_depth == 0:
                        method_body = "\n".join(lines[start_line : j + 1])
                        key = f"{class_fqn}.{method_name}({param_types})"
                        methods[key] = method_body
                        i = j + 1
                        break
                else:
                    i += 1
            else:
                i += 1

        return methods

    # Regex for method declarations (not constructors, not class/interface decl)
    _METHOD_DECL_RE = re.compile(
        r"^\s*(?:(?:public|private|protected|static|final|synchronized|"
        r"native|abstract|strictfp)\s+)*"
        r"(?:[\w<>\[\]?.]+\s+)"  # return type
        r"(\w+)"  # method name
        r"\s*\(([^)]*)\)"  # parameters
        r"(?:\s*throws\s+[\w.,\s]+)?"
        r"\s*\{"
    )

    def _is_method_declaration(self, line: str) -> Optional[tuple]:
        """Check if a line is a method declaration.

        Returns (method_name, param_types_str) or None.
        """
        m = self._METHOD_DECL_RE.match(line)
        if not m:
            return None

        method_name = m.group(1)
        params_raw = m.group(2).strip()

        # Skip class-level blocks
        if method_name in ("if", "for", "while", "switch", "try", "catch"):
            return None

        # Extract just the type names from parameters
        if not params_raw:
            return (method_name, "")

        param_types = []
        for param in params_raw.split(","):
            param = param.strip()
            if not param:
                continue
            parts = param.split()
            # Last non-annotation token before the variable name is the type
            # Simple heuristic: type is second-to-last, name is last
            if len(parts) >= 2:
                param_types.append(parts[-2])
            elif len(parts) == 1:
                param_types.append(parts[0])

        return (method_name, ", ".join(param_types))