Cecily Morrison

54 papers A* 12A 7C 1Journal 17Unranked 15
YearRankTypeTitle / Venue / Authors
2026 A* conf
CHI
Anja Thieme, Rita Faia Marques, Martin Grayson, Sidhika Balachandar, Cameron Tyler Cassidy, Madiha Zahrah Choksi, Camilla Longden, Reeda Shimaz Huda, Nicholas Ileve Kalovwe, Christina Mallon, Courtney Mansperger, Daniela Massiceti, Bhaskar Mitra, Ruth Mueni Nzioka, Ioana Tanase, Yuzhe You, Cecily Morrison
2026 A* conf
CHI
Gesu India, Martin Grayson, Cecily Morrison, Daniela Massiceti, Simon Robinson, Jennifer Pearson, Matt Jones
2025 A* conf
CHI
Katherine Mary Jones, Martin Grayson, Cecily Morrison, Ute Leonards, Oussama Metatla
2025 J jnl
ACM Trans. Comput. Hum. Interact.
Anja Thieme, Abhijith Rajamohan, Benjamin Cooper, Heather Groombridge, Robert Simister, Barney Wong, Nicholas Woznitza, Mark A. Pinnock, Maria T. A. Wetscherek, Cecily Morrison, Hannah Richardson, Fernando Pérez-García, Stephanie L. Hyland, Shruthi Bannur, Daniel Coelho de Castro, Kenza Bouzid, Anton Schwaighofer, Mercy Prasanna Ranjit, Harshita Sharma, Matthew P. Lungren, Ozan Oktay, Javier Alvarez-Valle, Aditya V. Nori, Steve K. Harris, Joseph Jacob
2025 A* conf
CHI
Gesu India, Simon Robinson, Jennifer Pearson, Cecily Morrison, Matt Jones
2025 A* conf
CHI
Jeremy Zhengqi Huang, Jaylin Herskovitz, Liang-Yuan Wu, Cecily Morrison, Dhruv Jain
2025 J jnl
Nat.
Anssi Kanervisto, David Bignell, Linda Yilin Wen, Martin Grayson, Raluca Georgescu, Sergio Valcarcel Macua, Shan Zheng Tan, Tabish Rashid, Tim Pearce, Yuhan Cao, Abdelhak Lemkhenter, Chentian Jiang, Gavin Costello, Gunshi Gupta, Marko Tot, Shu Ishida, Tarun Gupta, Udit Arora, Ryen W. White, Sam Devlin, Cecily Morrison, Katja Hofmann
2024 J jnl
CoRR
Anja Thieme, Abhijith Rajamohan, Benjamin Cooper, Heather Groombridge, Robert Simister, Barney Wong, Nicholas Woznitza, Mark Ames Pinnock, Maria Teodora Wetscherek, Cecily Morrison, Hannah Richardson, Fernando Pérez-García, Stephanie L. Hyland, Shruthi Bannur, Daniel C. Castro, Kenza Bouzid, Anton Schwaighofer, Mercy Ranjit, Harshita Sharma, Matthew P. Lungren, Ozan Oktay, Javier Alvarez-Valle, Aditya V. Nori, Stephen Harris, Joseph Jacob
2024 A* conf
CVPR
Daniela Massiceti, Camilla Longden, Agnieszka Slowik, Samuel Wills, Martin Grayson, Cecily Morrison
2024 conf
CHI Extended Abstracts
Linda Yilin Wen, Cecily Morrison, Martin Grayson, Rita Faia Marques, Daniela Massiceti, Camilla Longden, Edward Cutrell
2024 A* conf
NeurIPS
Samyadeep Basu, Martin Grayson, Cecily Morrison, Besmira Nushi, Soheil Feizi, Daniela Massiceti
2024 J jnl
CoRR
Samyadeep Basu, Martin Grayson, Cecily Morrison, Besmira Nushi, Soheil Feizi, Daniela Massiceti
2023 J jnl
ACM Trans. Comput. Hum. Interact.
Anja Thieme, Maryann Hanratty, Maria Lyons, Jorge E. Palacios, Rita Faia Marques, Cecily Morrison, Gavin Doherty
2023 conf
CHI Extended Abstracts
Harshadha Balasubramanian, Cecily Morrison, Martin Grayson, Zhanat Makhataeva, Rita Faia Marques, Thomas M. Gable, Dalya Perez, Edward Cutrell
2023 J jnl
CoRR
Daniela Massiceti, Camilla Longden, Agnieszka Slowik, Samuel Wills, Martin Grayson, Cecily Morrison
2023 A conf
ASSETS
Cecily Morrison, Martin Grayson, Rita Faia Marques, Daniela Massiceti, Camilla Longden, Linda Yilin Wen, Edward Cutrell
2021 A conf
ASSETS
Lida Theodorou, Daniela Massiceti, Luisa M. Zintgraf, Simone Stumpf, Cecily Morrison, Edward Cutrell, Matthew Tobias Harris, Katja Hofmann
2021 A conf
ASSETS
Cecily Morrison, Edward Cutrell, Martin Grayson, Elisabeth R. B. Becker, Vasiliki Kladouchou, Linda Pring, Katherine Mary Jones, Rita Faia Marques, Camilla Longden, Abigail Sellen
2021 A* conf
ICCV
Daniela Massiceti, Luisa M. Zintgraf, John Bronskill, Lida Theodorou, Matthew Tobias Harris, Edward Cutrell, Cecily Morrison, Katja Hofmann, Simone Stumpf
2021 J jnl
CoRR
Daniela Massiceti, Luisa M. Zintgraf, John Bronskill, Lida Theodorou, Matthew Tobias Harris, Edward Cutrell, Cecily Morrison, Katja Hofmann, Simone Stumpf
2021 J jnl
Interactions
Cecily Morrison, Ed Cutrell, Martin Grayson, Geert Roumen, Rita Faia Marques, Anja Thieme, Alex S. Taylor, Abigail Sellen
2021 J jnl
Hum. Comput. Interact.
Cecily Morrison, Nicolas Villar, Alex Hadwen-Bennett, Tim Regan, Daniel Cletheroe, Anja Thieme, Sue Sentance
2021 A* conf
CHI
Cecily Morrison, Edward Cutrell, Martin Grayson, Anja Thieme, Alex S. Taylor, Geert Roumen, Camilla Longden, Sebastian Tschiatschek, Rita Faia Marques, Abigail Sellen
2020 conf
CHI Extended Abstracts
Martin Grayson, Anja Thieme, Rita Faia Marques, Daniela Massiceti, Ed Cutrell, Cecily Morrison
2020 J jnl
Interactions
Anja Thieme, Ed Cutrell, Cecily Morrison, Alex S. Taylor, Abigail Sellen
2020 A conf
IUI
Subeida Ahmed, Harshadha Balasubramanian, Simone Stumpf, Cecily Morrison, Abigail Sellen, Martin Grayson
2020 J jnl
Int. J. Hum. Comput. Stud.
Kevin Doherty, Marguerite Barry, José Marcano Belisario, Cecily Morrison, Josip Car, Gavin J. Doherty
2020 J jnl
Hum. Comput. Interact.
Cecily Morrison, Nicolas Villar, Anja Thieme, Zahra Ashktorab, Eloise Taysom, Oscar Salandin, Daniel Cletheroe, Greg Saul, Alan F. Blackwell, Darren Edge, Martin Grayson, Haiyan Zhang
2019 A* conf
CHI
Kevin Doherty, José Marcano Belisario, Martin Cohn, Nikolaos Mastellos, Cecily Morrison, Josip Car, Gavin J. Doherty
2019 conf
CHI Extended Abstracts
Nicolas Villar, Cecily Morrison, Daniel Cletheroe, Tim Regan, Anja Thieme, Greg Saul
2018 J jnl
Int. J. Comput. Sci. Educ. Sch.
Alex Hadwen-Bennett, Sue Sentance, Cecily Morrison
2018 J jnl
ACM Trans. Interact. Intell. Syst.
Cecily Morrison, Kit Huckvale, Robert Corish, Richard Banks, Martin Grayson, Jonas F. Dorn, Abigail Sellen, Siân E. Lindley
2017 A conf
Conference on Designing Interactive Systems
Anja Thieme, Cecily Morrison, Nicolas Villar, Martin Grayson, Siân E. Lindley
2017 A conf
ASSETS
Cecily Morrison, Edward Cutrell, Anupama Dhareshwar, Kevin Doherty, Anja Thieme, Alex S. Taylor
2017 J jnl
BMC Medical Informatics Decis. Mak.
José Marcano Belisario, Ajay K. Gupta, John O'Donoghue, Paul Ramchandani, Cecily Morrison, Josip Car
2017 A* conf
CHI
Marguerite Barry, Kevin Doherty, José Marcano Belisario, Josip Car, Cecily Morrison, Gavin J. Doherty
2016 J jnl
Hum. Comput. Interact.
Cecily Morrison, Kit Huckvale, Robert Corish, Jonas F. Dorn, Peter Kontschieder, Kenton O'Hara, Antonio Criminisi, Abigail Sellen
2016 book
Kenton O'Hara, Cecily Morrison, Abigail Sellen, Nadia Bianchi-Berthouze, Cathy M. Craig
2016 A* conf
CHI
Advait Sarkar, Cecily Morrison, Jonas F. Dorn, Rishi Bedi, Saskia Steinheimer, Jacques Boisvert, Jessica Burggraaff, Marcus D'Souza, Peter Kontschieder, Samuel Rota Bulò, Lorcan Walsh, Christian P. Kamm, Yordan Zaykov, Abigail Sellen, Siân E. Lindley
2015 conf
ICCV Workshops
Simon Blessenohl, Cecily Morrison, Antonio Criminisi, Jamie Shotton
2014 conf
PervasiveHealth
Cecily Morrison, Robert Corish, Abigail Sellen
2014 A conf
Conference on Designing Interactive Systems
Cecily Morrison, Neil Smyth, Robert Corish, Kenton O'Hara, Abigail Sellen
2014 conf
CHI Extended Abstracts
Cecily Morrison, Robert Corish, Abigail Sellen
2014 conf
MICCAI (2)
Peter Kontschieder, Jonas F. Dorn, Cecily Morrison, Robert Corish, Darko Zikic, Abigail Sellen, Marcus D'Souza, Christian P. Kamm, Jessica Burggraaff, Prejaas Tewarie, Thomas Vogel, Michela Azzarito, Ben Glocker, Peter Chin, Frank Dahlke, Chris Polman, Ludwig Kappos, Bernard M. J. Uitdehaag, Antonio Criminisi
2012 C conf
Diagrams
Gyuchan Thomas Jun, Cecily Morrison, Christopher O'Loughlin, P. John Clarkson
2011 J jnl
Int. J. Medical Informatics
Cecily Morrison, Geraldine Fitzpatrick, Alan F. Blackwell
2010 conf
PPIG
Alan F. Blackwell, Cecily Morrison
2010
Cecily Morrison
2009 conf
BCS HCI
Cecily Morrison, Alan F. Blackwell
2009 conf
BCS HCI
Shazia Afzal, Cecily Morrison, Peter Robinson
2009 conf
IS-EUD
Cecily Morrison, Alan F. Blackwell
2008 conf
CHI Extended Abstracts
Cecily Morrison, Alan F. Blackwell
2007 conf
BCS HCI (2)
Cecily Morrison, Alan F. Blackwell
2007 conf
BCS HCI (2)
Cecily Morrison
redb/extractors/macho_extractors/macho_dylibs.py
← Index redb/extractors/macho_extractors/macho_dylibs.py python
import hashlib
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor
from redb.models.dataclasses import MachODylib


class MachODylibExtractor(MachOExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            macho,
        )
        self.elastic_index = self.index_prefix + "-macho_dylibs"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.MACHO_DYLIB.value

    def _extract_dylibs(self):
        """Extract dynamic library information from all architectures in the MachO binary."""
        self.log.debug(inspect.currentframe().f_code.co_name)
        dylibs = []

        if not self.macho:
            return dylibs

        try:
            # Get architectures using new API (already parsed in base class)
            architectures = self.macho.get_architectures()
            if not architectures:
                return dylibs

            # Process each architecture
            for arch_name in architectures:
                # Get dylib commands using new API with architecture parameter
                dylib_commands = self.macho.get_dylib_commands(arch=arch_name)
                if not dylib_commands:
                    continue

                # Extract dylib commands for this architecture
                for dylib_cmd in dylib_commands:
                    try:
                        dylib_name = dylib_cmd.get('dylib_name', 'Unknown')
                        if isinstance(dylib_name, bytes):
                            dylib_name = dylib_name.decode('utf-8', errors='replace')

                        # Create dylib dataclass with architecture info
                        macho_dylib = MachODylib(
                            dylib_name=dylib_name,
                            dylib_timestamp=dylib_cmd.get('dylib_timestamp', 0),
                            dylib_current_version=dylib_cmd.get('dylib_current_version', 0),
                            dylib_compat_version=dylib_cmd.get('dylib_compat_version', 0),
                        )
                        # Add architecture info to the dylib
                        macho_dylib.architecture = arch_name
                        dylibs.append(macho_dylib)

                    except Exception as e:
                        self.log.warning(
                            f'Unable to process dylib "{dylib_cmd.get("dylib_name", "Unknown")}" for architecture {arch_name} in {self.hash.sha256}: {e}'
                        )
                        continue

            return dylibs

        except Exception as e:
            self.log.error(f"Error extracting MachO dylibs: {e}")
            return dylibs

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            dylibs = self._extract_dylibs()
            return dylibs
        except Exception as e:
            self.log.error(f"Error extracting MachO dylibs: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            if not self.macho:
                return None

            # Get architectures (macho is already parsed in base class)
            try:
                architectures = self.macho.get_architectures()
                is_fat = len(architectures) > 1
            except Exception as e:
                self.log.error(f"Could not get architectures: {e}")
                return None

            data = []
            current_time = datetime.now(timezone.utc)

            # Loop through each architecture (1 for single, multiple for FAT)
            for arch_name in architectures:
                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_header_raw = self.macho.get_macho_header(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                    arch_cputype_raw = arch_header_raw.get('cputype', 0) if arch_header_raw else 0
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific data for {arch_name}: {e}")
                    arch_sha256 = self.sha256
                    arch_cputype_raw = 0

                # Get dylib commands for this architecture
                dylib_commands = self.macho.get_dylib_commands(arch=arch_name)
                if not dylib_commands:
                    continue

                # Process each dylib for this architecture
                for dylib_cmd in dylib_commands:
                    try:
                        dylib_name = dylib_cmd.get('dylib_name', 'Unknown')
                        if isinstance(dylib_name, bytes):
                            dylib_name = dylib_name.decode('utf-8', errors='replace')

                        data.append([
                            arch_sha256,                          # sha256 (architecture-specific)
                            dylib_name,                           # dylib_name
                            dylib_cmd.get('dylib_timestamp', 0), # dylib_timestamp
                            dylib_cmd.get('dylib_current_version', 0), # dylib_current_version
                            dylib_cmd.get('dylib_compat_version', 0),  # dylib_compat_version
                            current_time,                         # analysis_date
                        ])
                    except Exception as e:
                        self.log.warning(
                            f'Unable to process dylib "{dylib_cmd.get("dylib_name", "Unknown")}" for architecture {arch_name}: {e}'
                        )
                        continue

            column_names = [
                'sha256',
                'dylib_name', 'dylib_timestamp', 'dylib_current_version',
                'dylib_compat_version', 'analysis_date'
            ]

            if not data:
                return None

            column_type_names = [
                'FixedString(64)',
                'String', 'UInt32', 'UInt32',
                'UInt32', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

        return None

    def get_clickhouse_table(self) -> str:
        return "redb_macho_dylibs"