Wayne Joubert

48 papers A 8C 2Journal 23Unranked 15
YearRankTypeTitle / Venue / Authors
2024 J jnl
Concurr. Comput. Pract. Exp.
Verónica G. Melesse Vergara, Reuben D. Budiardja, Wayne Joubert
2023 conf
PASC
Jean Merlet, John H. Lagergren, Verónica Melesse Vergara, Mikaela Cashman, Christopher E. Bradburne, Raina Plowright, Emily Gurley, Wayne Joubert, Daniel A. Jacobson
2023 J jnl
CoRR
Paul T. Bauman, Reuben D. Budiardja, Dmytro Bykov, Noel Chalmers, Jacqueline Chen, Nicholas Curtis, Marc Day, Markus Eisenbach, Lucas Esclapez, Alessandro Fanfarillo, William Freitag, Nicholas Frontiere, Antigoni Georgiadou, Joseph Glenski, Kalyana C. Gottiparthi, Marc T. Henry de Frahan, Gustav R. Jansen, Wayne Joubert, Justin G. Lietz, Jakub Kurzak, Nicholas Malaya, Bronson Messer, Damon McDougall, Paul Mullowney, Stephen Nichols, Matthew R. Norman, Thomas Papatheodore, Jon S. Rood, Philip C. Roth, Sarat Sreepathi, James B. White III, Noah Wolfe
2023 A conf
SC
Nicholas Malaya, Bronson Messer, Joseph Glenski, Antigoni Georgiadou, Justin Lietz, Kalyana C. Gottiparthi, Marc Day, Jackie Chen, Jon S. Rood, Lucas Esclapez, James B. White III, Gustav R. Jansen, Nicholas Curtis, Stephen Nichols, Jakub Kurzak, Noel Chalmers, Chip Freitag, Paul T. Bauman, Alessandro Fanfarillo, Reuben D. Budiardja, Thomas Papatheodore, Nicholas Frontiere, Damon McDougall, Matthew R. Norman, Sarat Sreepathi, Philip C. Roth, Dmytro Bykov, Noah Wolfe, Paul Mullowney, Markus Eisenbach, Marc T. Henry de Frahan, Wayne Joubert
2023 A conf
SC
Scott Atchley, Christopher Zimmer, John Lange, David E. Bernholdt, Verónica G. Melesse Vergara, Thomas Beck, Michael J. Brim, Reuben D. Budiardja, Sunita Chandrasekaran, Markus Eisenbach, Thomas M. Evans, Matthew Ezell, Nicholas Frontiere, Antigoni Georgiadou, Joe Glenski, Philipp Grete, Steven P. Hamilton, John K. Holmen, Axel Huebl, Daniel A. Jacobson, Wayne Joubert, Kim H. McMahon, Elia Merzari, Stan G. Moore, Andrew Myers, Stephen Nichols, Sarp Oral, Thomas Papatheodore, Danny Perez, David M. Rogers, Evan Schneider, Jean-Luc Vay, P. K. Yeung
2023 conf
PASC
Mikaela Cashman, Verónica G. Melesse Vergara, John H. Lagergren, Matthew Lane, Jean Merlet, Mikaela Atkinson, Jared Streich, Christopher E. Bradburne, Raina Plowright, Wayne Joubert, Daniel A. Jacobson
2023 C conf
ISC
Reuben D. Budiardja, Mark A. Berrill, Markus Eisenbach, Gustav R. Jansen, Wayne Joubert, Stephen Nichols, David M. Rogers, Arnold N. Tharrington, O. E. Bronson Messer
2023 J jnl
Int. J. High Perform. Comput. Appl.
Darren J. Hsu, Hao Lu, Aditya Kashi, Michael A. Matheson, John Gounley, Feiyi Wang, Wayne Joubert, Jens Glaser
2022 A conf
SC
Hao Lu, Michael A. Matheson, Vladyslav Oles, J. Austin Ellis, Wayne Joubert, Feiyi Wang
2022 conf
IPDPS Workshops
Wayne Joubert, Bronson Messer, Philip C. Roth, Antigoni Georgiadou, Justin Lietz, Markus Eisenbach, Junqi Yin
2020 J jnl
Concurr. Comput. Pract. Exp.
Verónica G. Vergara Larrea, Reuben D. Budiardja, Rahulkumar Gayatri, Christopher S. Daley, Oscar R. Hernandez, Wayne Joubert
2020 J jnl
IBM J. Res. Dev.
Lixiang Luo, Tjerk P. Straatsma, Luis Enrique Aguilar-Suárez, Ria Broer, Dmytro Bykov, Eduardo F. D'Azevedo, Shirin S. Faraji, Kalyana C. Gottiparthi, Coen de Graaf, James Austin Harris, Remco W. A. Havenith, Hans Jørgen Aagard Jensen, Wayne Joubert, R. K. Kathir, Jeff Larkin, Ying Wai Li, Dmitry I. Lyakh, O. E. Bronson Messer, Matthew R. Norman, Joseph C. Oefelein, Ramanan Sankaran, Andreas F. Tillack, Ashleigh L. Barnes, Lucas Visscher, Jack C. Wells, Meilani Wibowo
2019 J jnl
Concurr. Comput. Pract. Exp.
Verónica G. Vergara Larrea, Michael J. Brim, Wayne Joubert, Swen Boehm, Matthew B. Baker, Oscar R. Hernandez, Sarp Oral, James Simmons, Don Maxwell
2019 J jnl
IBM J. Res. Dev.
David E. Womble, Mallikarjun Shankar, Wayne Joubert, J. Travis Johnston, Jack C. Wells, Jeffrey A. Nichols
2019 J jnl
Int. J. High Perform. Comput. Netw.
M. Graham Lopez, Wayne Joubert, Verónica G. Vergara Larrea, Oscar R. Hernandez, Azzam Haidar, Stanimire Tomov, Jack J. Dongarra
2019 J jnl
Comput. Phys. Commun.
Robert Searles, Sunita Chandrasekaran, Wayne Joubert, Oscar R. Hernandez
2019 J jnl
Parallel Comput.
Wayne Joubert, James Nance, Sharlee Climer, Deborah A. Weighill, Daniel A. Jacobson
2019 conf
ISC Workshops
Verónica G. Vergara Larrea, Wayne Joubert, Michael J. Brim, Reuben D. Budiardja, Don Maxwell, Matthew Ezell, Christopher Zimmer, Swen Boehm, Wael R. Elwasif, Sarp Oral, Chris Fuson, Daniel Pelfrey, Oscar R. Hernandez, Dustin Leverman, Jesse Hanley, Mark A. Berrill, Arnold N. Tharrington
2018 conf
PASC
Robert Searles, Sunita Chandrasekaran, Wayne Joubert, Oscar R. Hernandez
2018 A conf
SC
Wayne Joubert, Deborah A. Weighill, David Kainer, Sharlee Climer, Amy Justice, Kjiersten Fagnan, Daniel A. Jacobson
2018 conf
WACCPD@SC
Wenlu Zhang, Wayne Joubert, Peng Wang, Bei Wang, William Tang, Matthew Niemerg, Lei Shi, Sam Taimourzadeh, Jian Bao, Zhihong Lin
2018 J jnl
Int. J. High Perform. Comput. Appl.
O. E. Bronson Messer, Eduardo F. D'Azevedo, Judy Hill, Wayne Joubert, Mark A. Berrill, Christopher Zimmer
2018 J jnl
Parallel Comput.
Wayne Joubert, James Nance, Deborah A. Weighill, Daniel A. Jacobson
2018 A conf
SC
Sudharshan S. Vazhkudai, Bronis R. de Supinski, Arthur S. Bland, Al Geist, James C. Sexton, Jim Kahle, Christopher Zimmer, Scott Atchley, Sarp Oral, Don E. Maxwell, Verónica G. Vergara Larrea, Adam Bertsch, Robin Goldstone, Wayne Joubert, Chris Chambreau, David Appelhans, Robert Blackmore, Ben Casses, George Chochia, Gene Davison, Matthew A. Ezell, Tom Gooding, Elsa Gonsiorowski, Leopold Grinberg, Bill Hanson, Bill Hartner, Ian Karlin, Matthew L. Leininger, Dustin Leverman, Chris Marroquin, Adam Moody, Martin Ohmacht, Ramesh Pankajakshan, Fernando Pizzano, James H. Rogers, Bryan S. Rosenburg, Drew Schmidt, Mallikarjun Shankar, Feiyi Wang, Py Watson, Bob Walkup, Lance D. Weems, Junqi Yin
2017 conf
ISC Workshops
Verónica G. Vergara Larrea, Wayne Joubert, Mark A. Berrill, Swen Boehm, Arnold N. Tharrington, Wael R. Elwasif, Don E. Maxwell
2017 J jnl
CoRR
Wayne Joubert, James Nance, Sharlee Climer, Deborah A. Weighill, Daniel A. Jacobson
2017 J jnl
CoRR
Wayne Joubert, James Nance, Deborah A. Weighill, Daniel A. Jacobson
2016 conf
ISC Workshops
Guido Juckeland, Oscar R. Hernandez, Arpith C. Jacob, Daniel Neilson, Verónica G. Vergara Larrea, Sandra Wienke, Alexander Bobyr, William C. Brantley, Sunita Chandrasekaran, Mathew E. Colgrove, Alexander Grund, Robert Henschel, Wayne Joubert, Matthias S. Müller, Dave Raddatz, Pavel Shelepugin, Brian Whitney, Bo Wang, Kalyan Kumaran
2016 conf
WACCPD@SC
M. Graham Lopez, Verónica G. Vergara Larrea, Wayne Joubert, Oscar R. Hernandez, Azzam Haidar, Stanimire Tomov, Jack J. Dongarra
2015 J jnl
Comput. Electr. Eng.
Wayne Joubert, Rick Archibald, Mark A. Berrill, W. Michael Brown, Markus Eisenbach, Ray W. Grout, Jeff Larkin, John M. Levesque, Bronson Messer, Matthew R. Norman, Bobby Philip, Ramanan Sankaran, Arnold N. Tharrington, John A. Turner
2015 conf
HPCC/CSS/ICESS
Christos Kartsaklis, Wayne Joubert, Oscar R. Hernandez, Markus Eisenbach, Wael R. Elwasif, David E. Bernholdt
2015 C conf
CLUSTER
O. E. Bronson Messer, Eduardo F. D'Azevedo, Judith C. Hill, Wayne Joubert, S. Laosooksathit, Arnold N. Tharrington
2015 A conf
SC
Diego Rossinelli, Yu-Hang Tang, Kirill Lykov, Dmitry Alexeev, Massimo Bernaschi, Panagiotis E. Hadjidoukas, Mauro Bisson, Wayne Joubert, Christian Conti, George E. Karniadakis, Massimiliano Fatica, Igor Pivkin, Petros Koumoutsakos
2012 A conf
ICS
Wayne Joubert, Shi-Quan Su
2012 conf
IPDPS Workshops
Christos Kartsaklis, Oscar R. Hernandez, Chung-Hsing Hsu, Thomas Ilsche, Wayne Joubert, Richard L. Graham
2012 A conf
SC
Christopher Baker, Gregory G. Davidson, Thomas M. Evans, Steven P. Hamilton, Joshua J. Jarrell, Wayne Joubert
1999 conf
PP
Wayne Joubert
1996 J jnl
SIAM J. Matrix Anal. Appl.
Vance Faber, Wayne Joubert, Emanuel Knill, Thomas A. Manteuffel
1996 J jnl
SIAM J. Sci. Comput.
Alfred A. Lorber, Graham F. Carey, Wayne Joubert
1994 J jnl
SIAM J. Sci. Comput.
Wayne Joubert
1994 J jnl
Int. J. High Speed Comput.
Wayne Joubert, Graham F. Carey
1994 J jnl
Numer. Linear Algebra Appl.
Wayne Joubert, Thomas Oppe
1994 J jnl
Numer. Linear Algebra Appl.
Wayne Joubert
1993 conf
PPSC
Wayne Joubert, Graham F. Carey
1992 J jnl
SIAM J. Matrix Anal. Appl.
Wayne Joubert
1992 J jnl
SIAM J. Sci. Comput.
Wayne Joubert, Thomas A. Manteuffel, Seymour V. Parter, Sze-Ping Wong
1991 conf
PP
Wayne Joubert, Peter Highnam, Graham F. Carey
1991 conf
PP
Wayne Joubert, Graham F. Carey
redb/extractors/decompiler/apk/smali_normalization.py
← Index redb/extractors/decompiler/apk/smali_normalization.py python
"""Semantic normalization of Dalvik/smali instructions.

Analogous to Binary Ninja's LLIL normalization: strips register allocation
noise and instruction encoding variants while preserving semantic operations.

Three normalization levels (most aggressive to most detailed):
  - 'category':    semantic category only (MOV, ALU, CALL, ...)
  - 'opcode':      base opcode, width-invariant (add, sub, invoke, ...)
  - 'opcode_api':  opcode category + API method/field references for
                   invoke/field/alloc instructions (default for MinHash)

References:
  - Smali+ 12-category reduction (Canfora et al.)
  - MOSDroid opcode family grouping
  - DroidSIFT/DroidSim API-sensitive similarity
"""

import re
from typing import List

# ---------------------------------------------------------------------------
# Dalvik opcode -> semantic category mapping
# ---------------------------------------------------------------------------
# Prefix-matched against instruction opcodes. Order matters for overlapping
# prefixes (longer/more-specific prefixes should come first in iteration,
# but since we use startswith and break on first match, we order by
# specificity within the list).

OPCODE_CATEGORIES = {
    # Arithmetic/logic
    "add": "ALU", "sub": "ALU", "mul": "ALU", "div": "ALU",
    "rem": "ALU", "and": "ALU", "or": "ALU", "xor": "ALU",
    "shl": "ALU", "shr": "ALU", "ushr": "ALU", "neg": "ALU",
    "not": "ALU",
    # Data movement
    "move": "MOV", "const": "CONST",
    # Memory access (field/array)
    "iget": "LOAD", "sget": "LOAD", "aget": "LOAD",
    "iput": "STORE", "sput": "STORE", "aput": "STORE",
    # Invocations
    "invoke": "CALL",
    # Control flow
    "if": "BRANCH", "goto": "JMP",
    "switch": "SWITCH",
    "return": "RET",
    # Object/type
    "new": "ALLOC", "check": "TYPE", "instance": "TYPE",
    # Array
    "fill": "ARR", "array": "ARR",
    # Comparison
    "cmpl": "CMP", "cmpg": "CMP", "cmp": "CMP",
    # Exception / synchronization
    "throw": "EXC", "monitor": "SYNC",
    # Conversion (int-to-long, float-to-int, etc.)
    "int-to": "CONV", "long-to": "CONV", "float-to": "CONV",
    "double-to": "CONV",
}

# Pre-compiled regexes for operand extraction
_METHOD_REF_RE = re.compile(r"(L[\w/$]+;->[\w<>]+\(.*?\)[\w/$;\[]*)")
_FIELD_REF_RE = re.compile(r"(L[\w/$]+;->[\w]+:[\w/$;\[]+)")
_CLASS_REF_RE = re.compile(r"(L[\w/$]+;)")
_CONST_STRING_RE = re.compile(r'^const-string(?:/jumbo)?\s')


def categorize_opcode(opcode: str) -> str:
    """Map a Dalvik opcode to its semantic category.

    Prefix-matched: 'add-int/2addr' matches 'add' -> 'ALU'.
    Returns 'OTHER' for unrecognized opcodes.
    """
    for prefix, cat in OPCODE_CATEGORIES.items():
        if opcode.startswith(prefix):
            return cat
    return "OTHER"


# Mapping from semantic categories to the ACFG feature vector indices
# used by Binary Ninja's build_block_features (cfg_features.py).
# This enables cross-platform ACFG feature comparison.
CATEGORY_TO_ACFG_INDEX = {
    "ALU": 0,       # CAT_ARITHMETIC
    "CONV": 0,      # arithmetic-adjacent
    "CMP": 4,       # CAT_COMPARISON
    "MOV": 2,       # CAT_TRANSFER
    "CONST": 2,     # transfer-adjacent (loading constants)
    "LOAD": 5,      # CAT_MEMORY
    "STORE": 5,     # CAT_MEMORY
    "CALL": 3,      # CAT_CALL
    "BRANCH": 1,    # CAT_LOGIC (conditional logic)
    "JMP": 1,       # CAT_LOGIC
    "SWITCH": 1,    # CAT_LOGIC
    "RET": 2,       # CAT_TRANSFER
    "ALLOC": 5,     # CAT_MEMORY (heap allocation)
    "TYPE": 6,      # CAT_OTHER
    "ARR": 5,       # CAT_MEMORY
    "EXC": 6,       # CAT_OTHER
    "SYNC": 6,      # CAT_OTHER
    "OTHER": 6,     # CAT_OTHER
}


def normalize_instruction(line: str, level: str = "opcode_api") -> str:
    """Normalize a single smali instruction line.

    Args:
        line: A single smali instruction (whitespace-stripped).
        level: Normalization level:
            'category'   - most aggressive: just semantic category
            'opcode'     - base opcode only, width/addressing-mode invariant
            'opcode_api' - category + API references for invoke/field/alloc
                          (default, best for MinHash similarity)

    Returns:
        Normalized instruction string, or empty string for non-instructions.
    """
    stripped = line.strip()
    if not stripped:
        return ""

    parts = stripped.split(None, 1)
    opcode = parts[0]
    operands = parts[1] if len(parts) > 1 else ""

    if level == "category":
        return categorize_opcode(opcode)

    if level == "opcode":
        # Strip type/width suffixes for invariance:
        # add-int, add-long, add-float -> 'add'
        # add-int/2addr -> 'add'
        base = re.split(r"[-/]", opcode)[0]
        return base

    if level == "opcode_api":
        # const-string: preserve string content (encrypted strings are a
        # key malware indicator)
        if _CONST_STRING_RE.match(stripped):
            # Extract the string literal
            str_match = re.search(r'"(.*)"', operands)
            if str_match:
                return f"CONST_STR \"{str_match.group(1)}\""
            return "CONST_STR"

        # invoke-*: preserve method reference
        if opcode.startswith("invoke"):
            ref = _METHOD_REF_RE.search(operands)
            if ref:
                return f"CALL {ref.group(1)}"
            return "CALL"

        # Field access: preserve field reference
        if opcode.startswith(("iget", "iput", "sget", "sput")):
            ref = _FIELD_REF_RE.search(operands)
            if ref:
                cat = "LOAD" if "get" in opcode else "STORE"
                return f"{cat} {ref.group(1)}"
            # Fallback: try space-separated format from androguard
            # e.g. "iget v0, p0, Lcom/Foo;->field Ljava/lang/String;"
            space_ref = re.search(
                r"(L[\w/$]+;->[\w]+)\s+([\w/$;\[]+)", operands
            )
            if space_ref:
                cat = "LOAD" if "get" in opcode else "STORE"
                return f"{cat} {space_ref.group(1)}:{space_ref.group(2)}"
            cat = "LOAD" if "get" in opcode else "STORE"
            return cat

        # new-instance: preserve allocated type
        if opcode.startswith("new-instance") or opcode == "new-array":
            ref = _CLASS_REF_RE.search(operands)
            if ref:
                return f"ALLOC {ref.group(1)}"
            return "ALLOC"

        # Everything else: just the category
        return categorize_opcode(opcode)

    # Unknown level: return raw opcode
    return opcode


def normalize_method_body(
    body: str, level: str = "opcode_api"
) -> List[str]:
    """Normalize all instructions in a smali method body.

    Filters out directives (.), labels (:), comments (#), and blank lines.
    Returns a list of normalized instruction strings.

    Args:
        body: Raw smali method body text.
        level: Normalization level (see normalize_instruction).

    Returns:
        List of normalized instruction strings (no empty strings).
    """
    normalized = []
    for line in body.split("\n"):
        stripped = line.strip()
        # Skip non-instructions
        if not stripped:
            continue
        if stripped.startswith((".",":", "#")):
            continue
        result = normalize_instruction(stripped, level)
        if result:
            normalized.append(result)
    return normalized