Olivia Doggett

13 papers A* 5C 1Journal 2Unranked 5
YearRankTypeTitle / Venue / Authors
2026 A* conf
CHI
Carolyn Kim Ly, Trevor Cross, Selin Tasman, Jocelyn Mattka, Olivia Doggett, Megh Marathe, Priyank Chandra
2026 A* conf
CHI
Olivia Doggett, Jenna Myers, Matt Ratto, Priyank Chandra
2025 conf
CSCW Companion
Olivia Doggett
2024 J jnl
Proc. ACM Hum. Comput. Interact.
Olivia Doggett, Sarah Gram, Sophia Jit, Basel Harb, Houssam Harb, Mohamad Shafik, Robert Soden, Matt Ratto
2024 J jnl
Proc. ACM Hum. Comput. Interact.
Isabella Jaimes Rodriguez, Adrian Petterson, Olivia Doggett, Priyank Chandra
2024 A* conf
CHI
Olivia Doggett, Matt Ratto, Priyank Chandra
2024 A* conf
CHI
Adrian Petterson, Isabella Jaimes Rodriguez, Olivia Doggett, Priyank Chandra
2023 conf
CHI Extended Abstracts
Yana Boeva, Arne Berger, Andreas Bischof, Olivia Doggett, Hendrik Heuer, Juliane Jarke, Pat Treusch, Roger Andre Søraa, Zhasmina Tacheva, Maja-Lee Voigt
2023 conf
CHI Extended Abstracts
Olivia Doggett
2023 conf
CSCW Companion
Olivia Doggett, Jen Liu, Ufuoma Ovienmhada, Samar Sabie, Sarah Gram, Laura J. Perovich, Matt Ratto, Robert Soden
2023 A* conf
CHI
Olivia Doggett, Kelly Bronson, Robert Soden
2022 conf
CHI Extended Abstracts
Mathew Iantorno, Olivia Doggett, Priyank Chandra, Julie Yujie Chen, Rosemary Steup, Noopur Raval, Vera D. Khovanskaya, Laura Lam, Anubha Singh, Sarah Rotz, Matt Ratto
2021 C conf
COMPASS
Robert Soden, Pradnaya Pathak, Olivia Doggett
redb/extractors/decompiler/bninja/analysis/low_level_normalization.py
← Index redb/extractors/decompiler/bninja/analysis/low_level_normalization.py python
from binaryninja import (
    ILRegister, ILRegisterStack, ILFlag,
    ILIntrinsic, ILSemanticFlagGroup,
)

class LowLevelNormalization:
    def __init__(self):
        return

    def _collect_ops(self, il, ops):
        if il is None:
            return
        ops.append(int(il.operation))
        operands = getattr(il, "operands", None)
        if not operands:
            return
        for op in operands:
            if hasattr(op, "operation"):
                self._collect_ops(op, ops)
            elif isinstance(op, (list, tuple)):
                for sub in op:
                    if hasattr(sub, "operation"):
                        self._collect_ops(sub, ops)

    def normalize_instruction_all_levels(self, instr_il):
        ops = []
        self._collect_ops(instr_il, ops)

        return ops

    def _leaf_type(self, val):
        if isinstance(val, ILRegister):
            return "REG"
        if isinstance(val, ILRegisterStack):
            return "REG_STACK"
        if isinstance(val, ILFlag):
            return "FLAG"
        if isinstance(val, ILSemanticFlagGroup):
            return "FLAG_GROUP"
        if isinstance(val, ILIntrinsic):
            return "INTRINSIC"
        if isinstance(val, bool):
            return "BOOL"
        if isinstance(val, int):
            return "CONST"
        return type(val).__name__.upper()

    def _collect(self, il, out):
        if il is None:
            return
        out.append(int(il.operation))
        operands = getattr(il, "operands", None)
        if not operands:
            return
        for op in operands:
            if hasattr(op, "operation"):
                self._collect(op, out)
            elif isinstance(op, (list, tuple)):
                for sub in op:
                    if hasattr(sub, "operation"):
                        self._collect(sub, out)
                    else:
                        out.append(self._leaf_type(sub))
            else:
                out.append(self._leaf_type(op))

    def normalize_instr_with_operands(self, instr_il):
        ops = []
        self._collect(instr_il, ops)
        return ops