UNPKG

ts-capstone

Version:

This module provides bindings for the Capstone disassembly framework.

162 lines (158 loc) 3.55 kB
import { expect, test } from 'bun:test'; import CS from '../../capstone'; test('CS.ARCH_SPARC', () => { const buffer = new Uint8Array([ 0x80, 0xa0, 0x40, 0x02, 0x85, 0xc2, 0x60, 0x08, 0x85, 0xe8, 0x20, 0x01, 0x81, 0xe8, 0x00, 0x00, 0x90, 0x10, 0x20, 0x01, 0xd5, 0xf6, 0x10, 0x16, 0x21, 0x00, 0x00, 0x0a, 0x86, 0x00, 0x40, 0x02, 0x01, 0x00, 0x00, 0x00, 0x12, 0xbf, 0xff, 0xff, 0x10, 0xbf, 0xff, 0xff, 0xa0, 0x02, 0x00, 0x09, 0x0d, 0xbf, 0xff, 0xff, 0xd4, 0x20, 0x60, 0x00, 0xd4, 0x4e, 0x00, 0x16, 0x2a, 0xc2, 0x80, 0x03, ]); const disassembler = new CS.CAPSTONE( CS.ARCH_SPARC, CS.MODE_BIG_ENDIAN + CS.MODE_V9, ); disassembler.option(CS.OPT_DETAIL, true); const insns = disassembler.disasm(buffer, 0x1000); expect( insns.map(({ id, address, size, mnemonic, op_str, bytes }) => ({ id, address, size, mnemonic, op_str, bytes, })), ).toEqual([ { id: 33, address: 4096, size: 4, mnemonic: 'cmp', op_str: '%g1, %g2', bytes: new Uint8Array([128, 160, 64, 2]), }, { id: 194, address: 4100, size: 4, mnemonic: 'jmpl', op_str: '%o1+8, %g2', bytes: new Uint8Array([133, 194, 96, 8]), }, { id: 226, address: 4104, size: 4, mnemonic: 'restore', op_str: '%g0, 1, %g2', bytes: new Uint8Array([133, 232, 32, 1]), }, { id: 226, address: 4108, size: 4, mnemonic: 'restore', op_str: '', bytes: new Uint8Array([129, 232, 0, 0]), }, { id: 221, address: 4112, size: 4, mnemonic: 'mov', op_str: '1, %o0', bytes: new Uint8Array([144, 16, 32, 1]), }, { id: 28, address: 4116, size: 4, mnemonic: 'casx', op_str: '[%i0], %l6, %o2', bytes: new Uint8Array([213, 246, 16, 22]), }, { id: 232, address: 4120, size: 4, mnemonic: 'sethi', op_str: '0xa, %l0', bytes: new Uint8Array([33, 0, 0, 10]), }, { id: 6, address: 4124, size: 4, mnemonic: 'add', op_str: '%g1, %g2, %g3', bytes: new Uint8Array([134, 0, 64, 2]), }, { id: 217, address: 4128, size: 4, mnemonic: 'nop', op_str: '', bytes: new Uint8Array([1, 0, 0, 0]), }, { id: 16, address: 4132, size: 4, mnemonic: 'bne', op_str: '0x1020', bytes: new Uint8Array([18, 191, 255, 255]), }, { id: 16, address: 4136, size: 4, mnemonic: 'ba', op_str: '0x1024', bytes: new Uint8Array([16, 191, 255, 255]), }, { id: 6, address: 4140, size: 4, mnemonic: 'add', op_str: '%o0, %o1, %l0', bytes: new Uint8Array([160, 2, 0, 9]), }, { id: 19, address: 4144, size: 4, mnemonic: 'fbg', op_str: '0x102c', bytes: new Uint8Array([13, 191, 255, 255]), }, { id: 246, address: 4148, size: 4, mnemonic: 'st', op_str: '%o2, [%g1]', bytes: new Uint8Array([212, 32, 96, 0]), }, { id: 198, address: 4152, size: 4, mnemonic: 'ldsb', op_str: '[%i0+%l6], %o2', bytes: new Uint8Array([212, 78, 0, 22]), }, { id: 24, address: 4156, size: 4, mnemonic: 'brnz,a,pn', op_str: '%o2, 0x1048', bytes: new Uint8Array([42, 194, 128, 3]), }, ]); disassembler.close(); });