James A. Kadin

40 papers A* 1C 2Journal 35Unranked 2
YearRankTypeTitle / Venue / Authors
2021 J jnl
Nucleic Acids Res.
Judith A. Blake, Richard M. Baldarelli, James A. Kadin, Joel E. Richardson, Cynthia L. Smith, Carol J. Bult, Anna V. Anagnostopoulos, Jon S. Beal, Susan M. Bello, Olin Blodgett, Nancy E. Butler, Jeff Campbell, Karen R. Christie, Lori E. Corbani, Mary E. Dolan, Harold J. Drabkin, María Flores, Susan L. Giannatto, Angelina Guerra, Paul Hale, David P. Hill, Jonathan Judd, Meiyee Law, Monica McAndrews, Dave Miers, Cailey Mitchell, Howie Motenko, Li Ni, Hiroaki Onda, Janice Ormsby, Michelle Perry, Jill M. Recla, David R. Shaw, Dmitry Sitnikov, Monika Tomczuk, Laurens G. Wilming, Yunxia Sophia Zhu
2021 J jnl
Nucleic Acids Res.
Richard M. Baldarelli, Constance M. Smith, Jacqueline H. Finger, Terry F. Hayamizu, Ingeborg J. McCright, Jingxia Xu, David R. Shaw, Jonathan S. Beal, Olin Blodgett, Jeff Campbell, Lori E. Corbani, Pete J. Frost, Sharon C. Giannatto, Dave Miers, James A. Kadin, Joel E. Richardson, Martin Ringwald
2020 J jnl
Nucleic Acids Res.
Julie Agapite, Laurent-Philippe Albou, Suzi A. Aleksander, Joanna Argasinska, Valerio Arnaboldi, Helen Attrill, Susan M. Bello, Judith A. Blake, Olin Blodgett, Yvonne M. Bradford, Carol J. Bult, Scott Cain, Brian R. Calvi, Seth Carbon, Juancarlos Chan, Wen J. Chen, J. Michael Cherry, Jae-Hyoung Cho, Karen R. Christie, Madeline A. Crosby, Jeff de Pons, Mary E. Dolan, Gilberto dos Santos, Barbara Dunn, Nathan A. Dunn, Anne E. Eagle, Dustin Ebert, Stacia R. Engel, David Fashena, Ken Frazer, Sibyl Gao, Felix Gondwe, Joshua L. Goodman, L. Sian Gramates, Christian A. Grove, Todd W. Harris, Marie-Claire Harrison, Douglas G. Howe, Kevin L. Howe, Sagar Jha, James A. Kadin, Thomas C. Kaufman, Patrick Kalita, Kalpana Karra, Ranjana Kishore, Stanley J. F. Laulederkind, Raymond Y. N. Lee, Kevin A. MacPherson, Steven J. Marygold, Beverley Matthews, Gillian H. Millburn, Stuart R. Miyasato, Sierra A. T. Moxon, Hans-Michael Müller, Christopher J. Mungall, Anushya Muruganujan, Tremayne Mushayahama, Robert S. Nash, Patrick Ng, Michael Paulini, Norbert Perrimon, Christian Pich, Daniela Raciti, Joel E. Richardson, Matthew Russell, Susan Russo Gelbart, Leyla Ruzicka, Kevin Schaper, Mary Shimoyama, Matt Simison, Cynthia L. Smith, David R. Shaw, Ajay Shrivatsav, Marek S. Skrzypek, Jennifer R. Smith, Paul W. Sternberg, Christopher J. Tabone, Paul D. Thomas, Jyothi Thota, Sabrina Toro, Monika Tomczuk, Marek Tutaj, Monika Tutaj, Jose-Maria Urbano, Kimberly Van Auken, Ceri E. Van Slyke, Shur-Jen Wang, Shuai Weng, Monte Westerfield, Gary Williams, Edith D. Wong, Adam Wright, Karen Yook
2020 J jnl
Database J. Biol. Databases Curation
Constance M. Smith, James A. Kadin, Richard M. Baldarelli, Jonathan S. Beal, Olin Blodgett, Sharon C. Giannatto, Joel E. Richardson, Martin Ringwald
2020 J jnl
Database J. Biol. Databases Curation
Xiangying Jiang, Pengyuan Li, James A. Kadin, Judith A. Blake, Martin Ringwald, Hagit Shatkay
2019 J jnl
Nucleic Acids Res.
Carol J. Bult, Judith A. Blake, Cynthia L. Smith, James A. Kadin, Joel E. Richardson, The Mouse Genome Database Group
2019 J jnl
Nucleic Acids Res.
Constance M. Smith, Terry F. Hayamizu, Jacqueline H. Finger, Susan M. Bello, Ingeborg J. McCright, Jingxia Xu, Richard M. Baldarelli, Jon S. Beal, Jeff Campbell, Lori E. Corbani, Pete J. Frost, Jill R. Lewis, Sharon C. Giannatto, Dave Miers, David R. Shaw, James A. Kadin, Joel E. Richardson, Cynthia L. Smith, Martin Ringwald
2018 J jnl
Nucleic Acids Res.
Cynthia L. Smith, Judith A. Blake, James A. Kadin, Joel E. Richardson, Carol J. Bult, The Mouse Genome Database Group
2017 J jnl
Nucleic Acids Res.
Judith A. Blake, Janan T. Eppig, James A. Kadin, Joel E. Richardson, Cynthia L. Smith, Carol J. Bult, The Mouse Genome Database Group
2017 J jnl
Nucleic Acids Res.
Jacqueline H. Finger, Constance M. Smith, Terry F. Hayamizu, Ingeborg J. McCright, Jingxia Xu, Meiyee Law, David R. Shaw, Richard M. Baldarelli, Jon S. Beal, Olin Blodgett, Jeff Campbell, Lori E. Corbani, Jill R. Lewis, Kim L. Forthofer, Pete J. Frost, Sharon C. Giannatto, Lucie N. Hutchins, Dave Miers, Howie Motenko, Kevin R. Stone, Janan T. Eppig, James A. Kadin, Joel E. Richardson, Martin Ringwald
2016 J jnl
Nucleic Acids Res.
Carol J. Bult, Janan T. Eppig, Judith A. Blake, James A. Kadin, Joel E. Richardson
2015 J jnl
Nucleic Acids Res.
Janan T. Eppig, Judith A. Blake, Carol J. Bult, James A. Kadin, Joel E. Richardson
2014 J jnl
Nucleic Acids Res.
Judith A. Blake, Carol J. Bult, Janan T. Eppig, James A. Kadin, Joel E. Richardson
2014 J jnl
Nucleic Acids Res.
Constance M. Smith, Jacqueline H. Finger, Terry F. Hayamizu, Ingeborg J. McCright, Jingxia Xu, Joanne Berghout, Jeff Campbell, Lori E. Corbani, Kim L. Forthofer, Pete J. Frost, Dave Miers, David R. Shaw, Kevin R. Stone, Janan T. Eppig, James A. Kadin, Joel E. Richardson, Martin Ringwald
2013 J jnl
Nucleic Acids Res.
Carol J. Bult, Janan T. Eppig, Judith A. Blake, James A. Kadin, Joel E. Richardson
2012 J jnl
Nucleic Acids Res.
Janan T. Eppig, Judith A. Blake, Carol J. Bult, James A. Kadin, Joel E. Richardson
2012 J jnl
Database J. Biol. Databases Curation
Terry F. Hayamizu, Sherri de Coronado, Gilberto Fragoso, Nicholas Sioutos, James A. Kadin, Martin Ringwald
2012 conf
ICBO
Li Ni, Carol J. Bult, James A. Kadin, Joel E. Richardson, Martin Ringwald, Janan T. Eppig, Judith A. Blake
2011 J jnl
Nucleic Acids Res.
Martin Ringwald, Vivek Iyer, Jeremy C. Mason, Kevin R. Stone, Hamsa D. Tadepally, James A. Kadin, Carol J. Bult, Janan T. Eppig, Darren J. Oakley, Sebastien Briois, Elia Stupka, Vincenza Maselli, Damian Smedley, Songyan Liu, Jens Hansen, Richard A. Baldock, Geoffrey G. Hicks, William C. Skarnes
2011 J jnl
Nucleic Acids Res.
Judith A. Blake, Carol J. Bult, James A. Kadin, Joel E. Richardson, Janan T. Eppig
2011 J jnl
Nucleic Acids Res.
Jacqueline H. Finger, Constance M. Smith, Terry F. Hayamizu, Ingeborg J. McCright, Janan T. Eppig, James A. Kadin, Joel E. Richardson, Martin Ringwald
2010 J jnl
Nucleic Acids Res.
Carol J. Bult, James A. Kadin, Joel E. Richardson, Judith A. Blake, Janan T. Eppig
2009 J jnl
Nucleic Acids Res.
Judith A. Blake, Carol J. Bult, Janan T. Eppig, James A. Kadin, Joel E. Richardson
2008 J jnl
Nucleic Acids Res.
Carol J. Bult, Janan T. Eppig, James A. Kadin, Joel E. Richardson, Judith A. Blake
2008 C conf
BIBE
Anna V. Anagnostopoulos, Judith A. Blake, Carol J. Bult, Martin Ringwald, Joel E. Richardson, James A. Kadin, Janan T. Eppig
2007 J jnl
Nucleic Acids Res.
Constance M. Smith, Jacqueline H. Finger, Terry F. Hayamizu, Ingeborg J. McCright, Janan T. Eppig, James A. Kadin, Joel E. Richardson, Martin Ringwald
2007 J jnl
Nucleic Acids Res.
Janan T. Eppig, Judith A. Blake, Carol J. Bult, James A. Kadin, Joel E. Richardson
2006 J jnl
Nucleic Acids Res.
Judith A. Blake, Janan T. Eppig, Carol J. Bult, James A. Kadin, Joel E. Richardson
2005 conf
CSB Workshops
Donnie Qi, Judith A. Blake, James A. Kadin, Joel E. Richardson, Martin Ringwald, Janan T. Eppig, Carol J. Bult
2005 J jnl
Nucleic Acids Res.
Janan T. Eppig, Carol J. Bult, James A. Kadin, Joel E. Richardson, Judith A. Blake
2004 A* conf
ICDE
Joel E. Richardson, James A. Kadin, Judith A. Blake, Carol J. Bult, Janan T. Eppig, Martin Ringwald
2004 J jnl
Nucleic Acids Res.
Carol J. Bult, Judith A. Blake, Joel E. Richardson, James A. Kadin, Janan T. Eppig
2004 J jnl
Nucleic Acids Res.
David P. Hill, Dale A. Begley, Jacqueline H. Finger, Terry F. Hayamizu, Ingeborg J. McCright, Constance M. Smith, Jon S. Beal, Lori E. Corbani, Judith A. Blake, Janan T. Eppig, James A. Kadin, Joel E. Richardson, Martin Ringwald
2003 J jnl
Nucleic Acids Res.
Judith A. Blake, Joel E. Richardson, Carol J. Bult, James A. Kadin, Janan T. Eppig
2002 J jnl
Nucleic Acids Res.
Judith A. Blake, Joel E. Richardson, Carol J. Bult, James A. Kadin, Janan T. Eppig
2001 J jnl
Nucleic Acids Res.
Martin Ringwald, Janan T. Eppig, Dale A. Begley, John P. Corradi, Ingeborg J. McCright, Terry F. Hayamizu, David P. Hill, James A. Kadin, Joel E. Richardson
2001 J jnl
Nucleic Acids Res.
Judith A. Blake, Janan T. Eppig, Joel E. Richardson, Carol J. Bult, James A. Kadin
2000 J jnl
Nucleic Acids Res.
Martin Ringwald, Janan T. Eppig, James A. Kadin, Joel E. Richardson
2000 C conf
BIBE
Carol J. Bult, Joel E. Richardson, Judith A. Blake, James A. Kadin, Martin Ringwald, Janan T. Eppig
1999 J jnl
Nucleic Acids Res.
Martin Ringwald, Mary E. Mangan, Janan T. Eppig, James A. Kadin, Joel E. Richardson
redb/extractors/decompiler/bninja/arch/x86.py
← Index redb/extractors/decompiler/bninja/arch/x86.py python
from binaryninja.enums import (
    InstructionTextTokenType,
)

# Support both package and standalone imports
try:
    from .architecture import Architecture
except ImportError:
    # Fallback to absolute imports (for multiprocessing spawned processes)
    from redb.extractors.decompiler.bninja.arch.architecture import Architecture


class Arch_x86(Architecture):
    """The concrete class for architecture-dependent details for x86_64"""

    def __init__(self):
        # general purpose registers for 64bits
        self.gpr_64 = [
            "RAX",
            "RBX",
            "RCX",
            "RDX",
            "RSI",
            "RDIR9",
            "R10",
            "R11",
            "R12",
            "R13",
            "R14",
            "R15",
        ]

        self.gpr_32 = [
            "EAX",
            "EBX",
            "ECX",
            "EDX",
            "ESI",
            "EDI",
            "R8D",
            "R9D",
            "R10D",
            "R11D",
            "R12D",
            "R13D",
            "R14D",
            "R15D",
        ]

        self.gpr_16 = [
            "AX",
            "BX",
            "CX",
            "DX",
            "SI",
            "DI",
            "R8W",
            "R9W",
            "R10W",
            "R11W",
            "R12W",
            "R13W",
            "R14W",
            "R15W",
        ]

        self.gpr_8 = [
            "AL",
            "BL",
            "CL",
            "DL",
            "SIL",
            "DIL",
            "R8B",
            "R9B",
            "R10B",
            "R11B",
            "R12B",
            "R13B",
            "R14B",
            "R15B",
        ]

        self.fpu_x87 = ["ST0", "ST1", "ST2", "ST3", "ST4", "ST5", "ST6", "ST7"]

        self.sse_xmm = [
            "XMM0",
            "XMM1",
            "XMM2",
            "XMM3",
            "XMM4",
            "XMM5",
            "XMM6",
            "XMM7",
            "XMM8",
            "XMM9",
            "XMM10",
            "XMM11",
            "XMM12",
            "XMM13",
            "XMM14",
            "XMM15",
        ]

        self.avx_ymm = [
            "YMM0",
            "YMM1",
            "YMM2",
            "YMM3",
            "YMM4",
            "YMM5",
            "YMM6",
            "YMM7",
            "YMM8",
            "YMM9",
            "YMM10",
            "YMM11",
            "YMM12",
            "YMM13",
            "YMM14",
            "YMM15",
        ]
        self.flags = ["FLAGS", "EFLAGS", "RFLAGS"]
        self.stack_registers = ["RBP", "RSP", "SP", "BP"]
        self.size = 8
        self.global_registers = (
            self.gpr_64
            + self.gpr_32
            + self.gpr_16
            + self.gpr_8
            + self.fpu_x87
            + self.sse_xmm
            + self.avx_ymm
        )
        self.opcode_categories = self._initialize_opcode_categories()

        ## instructions
        self.instructions = []

    def is_register(self, register):
        register = register.upper()
        return register in self.global_registers

    def is_general_purpose_register(self, register):
        register = register.upper()
        return (
            register in self.gpr_64
            or register in self.gpr_32
            or register in self.gpr_16
            or register in self.gpr_8
        )

    def is_stack_register(self, register):
        register = register.upper()
        return register in self.stack_registers

    def is_xmm_register(self, register):
        register = register.upper()
        return register in self.sse_xmm

    def is_control_flow(self, instr_tokens):
        return False

    def is_control_flow_instruction(self, instr_tokens):
        """Check if an instruction is a control flow instruction (jump, call, return, loop)."""
        try:
            # Extract the mnemonic from the instruction tokens
            mnemonic = None
            for token in instr_tokens:
                if token.type == InstructionTextTokenType.InstructionToken:
                    mnemonic = token.text.upper()
                    break

            if not mnemonic:
                return False

            # Check if it's a jump, call, return, or loop instruction
            return (
                mnemonic.startswith("J")  # All jumps (JMP, JE, JNE, etc.)
                or mnemonic == "CALL"  # Function calls
                or mnemonic == "RET"  # Return
                or mnemonic == "RETN"  # Another form of return
                or mnemonic.startswith("LOOP")
            )  # Loop instructions

        except Exception as e:
            print(e)
            # If we can't determine, assume it's not a control flow instruction
            return False

    def is_control_flow_instruction_by_mnemonic(self, mnemonic):
        """Check if an instruction is a control flow instruction based on its mnemonic."""
        if not mnemonic:
            return False

        mnemonic = mnemonic.upper()
        return (
            mnemonic.startswith("J")  # All jumps (JMP, JE, JNE, etc.)
            or mnemonic == "CALL"  # Function calls
            or mnemonic == "RET"  # Return
            or mnemonic == "RETN"  # Another form of return
            or mnemonic.startswith("LOOP")
        )

    def _initialize_opcode_categories(self):
        """Initialize mapping of opcodes to categories similar to Ghidra's implementation."""
        opcode_categories = {}
        opcode_index = {}  # Add this to mimic Ghidra's opcodeIndex

        # Define common opcodes array similar to Ghidra's COMMON_OPCODES
        COMMON_OPCODES = [
            # Core instructions (tracked individually)
            "MOV",
            "PUSH",
            "POP",
            "LEA",
            "CALL",
            "RET",  # Data movement and control
            "ADD",
            "SUB",
            "MUL",
            "DIV",  # Basic arithmetic
            "AND",
            "OR",
            "XOR",
            "NOT",  # Logical operations
            "JMP",
            "JE",
            "JNE",  # Basic jumps
            "TEST",
            "CMP",  # Comparisons
            # Grouped categories (aggregated tracking)
            "SIMD_MOVE",  # MOVAPS, MOVDQA, MOVDQU, etc.
            "COND_JUMP_EXT",  # Other conditional jumps (JG, JL, JGE, etc.)
            "STRING_OP",  # MOVS, STOS, LODS, SCAS, CMPS
            "STACK_ADV",  # ENTER, LEAVE, PUSHA, POPA
            "ARITHMETIC_ADV",  # IMUL, IDIV, ADC, SBB
            "BIT_OP",  # SHL, SHR, SAR, ROL, ROR, etc.
            "FPU_OP",  # FLD, FST, FADD, etc.
            "SYSTEM_OP",  # SYSCALL, INT, SYSENTER
            "CRYPTO_OP",  # AES*, SHA* instructions
            "MISC_OP",  # Rare but interesting (CPUID, RDTSC, etc.)
        ]

        # Create index map like Ghidra
        for i, opcode in enumerate(COMMON_OPCODES):
            opcode_index[opcode] = i

        # Now categorize opcodes using if/elif/else structure like in Ghidra
        for opcode in COMMON_OPCODES:
            # String Operations (checking these first to avoid MOV confusion)
            if opcode.startswith("MOVS") or opcode in [
                "STOS",
                "LODS",
                "SCAS",
                "CMPS",
                "REP",
                "REPE",
                "REPNE",
            ]:
                opcode_categories[opcode] = "STRING_MANIPULATION"

            # Data Movement (after string ops to avoid MOVS confusion)
            elif opcode.startswith("MOV") or opcode in ["LEA", "XCHG"]:
                opcode_categories[opcode] = "DATA_MOVEMENT"

            # Stack Operations
            elif opcode in ["PUSH", "POP", "ENTER", "LEAVE", "PUSHA", "POPA"]:
                opcode_categories[opcode] = "STACK_MANAGEMENT"

            # Control Flow (non-conditional)
            elif opcode in ["JMP", "CALL", "RET"]:
                opcode_categories[opcode] = "CONTROL_FLOW"

            # Conditional Jumps and Loops
            elif opcode.startswith("J") or opcode.startswith("LOOP"):
                opcode_categories[opcode] = "CONDITIONAL_JUMP"

            # Arithmetic
            elif opcode in [
                "ADD",
                "SUB",
                "MUL",
                "DIV",
                "IMUL",
                "IDIV",
                "ADC",
                "SBB",
                "INC",
                "DEC",
                "NEG",
            ]:
                opcode_categories[opcode] = "ARITHMETIC"

            # Logical
            elif opcode in ["AND", "OR", "XOR", "NOT", "TEST", "CMP"]:
                opcode_categories[opcode] = "LOGICAL"

            # Shifts & Rotates
            elif opcode in ["SHL", "SHR", "SAR", "SAL", "ROL", "ROR", "RCL", "RCR"]:
                opcode_categories[opcode] = "SHIFT_ROTATE"

            # System & Interrupts
            elif opcode in [
                "SYSCALL",
                "INT",
                "SYSENTER",
                "SYSEXIT",
                "SGDT",
                "SIDT",
                "SLDT",
                "WRMSR",
                "RDMSR",
            ]:
                opcode_categories[opcode] = "SYSTEM_CALLS"

            # Floating Point
            elif opcode.startswith("F"):
                opcode_categories[opcode] = "FPU_ARITHMETIC"

            # System Information and Random Number Generation
            elif opcode in ["PUSHF", "POPF", "CPUID", "RDTSC", "RDRAND", "RDSEED"]:
                opcode_categories[opcode] = "CPU_FEATURES"

            # Cryptography
            elif opcode.startswith("AES") or opcode.startswith("SHA"):
                opcode_categories[opcode] = "CRYPTOGRAPHIC"

            # Miscellaneous (including flag operations)
            else:
                opcode_categories[opcode] = "MISC"

        # Additional categorization for opcodes not in COMMON_OPCODES
        # This can be used in the normalize_opcode method

        # Store both maps as instance variables
        # self.opcode_categories = opcode_categories
        self.opcode_index = opcode_index

        return opcode_categories

    def is_simd_register(self, register):
        return register in self.sse_xmm