UNPKG

ts-capstone

Version:

This module provides bindings for the Capstone disassembly framework.

185 lines (180 loc) 4.19 kB
import { expect, test } from 'bun:test'; import CS from '../../capstone'; test('CS.ARCH_ARM64(AARCH64)', () => { const buffer = new Uint8Array([ 0x09, 0x00, 0x38, 0xd5, 0xbf, 0x40, 0x00, 0xd5, 0x0c, 0x05, 0x13, 0xd5, 0x20, 0x50, 0x02, 0x0e, 0x20, 0xe4, 0x3d, 0x0f, 0x00, 0x18, 0xa0, 0x5f, 0xa2, 0x00, 0xae, 0x9e, 0x9f, 0x37, 0x03, 0xd5, 0xbf, 0x33, 0x03, 0xd5, 0xdf, 0x3f, 0x03, 0xd5, 0x21, 0x7c, 0x02, 0x9b, 0x21, 0x7c, 0x00, 0x53, 0x00, 0x40, 0x21, 0x4b, 0xe1, 0x0b, 0x40, 0xb9, 0x20, 0x04, 0x81, 0xda, 0x20, 0x08, 0x02, 0x8b, 0x10, 0x5b, 0xe8, 0x3c, 0xfd, 0x7b, 0xba, 0xa9, 0xfd, 0xc7, 0x43, 0xf8, ]); const disassembler = new CS.CAPSTONE(CS.ARCH_ARM64, CS.MODE_ARM); 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: 662, address: 4096, size: 4, mnemonic: 'mrs', op_str: 'x9, midr_el1', bytes: new Uint8Array([9, 0, 56, 213]), }, { id: 664, address: 4100, size: 4, mnemonic: 'msr', op_str: 'spsel, #0', bytes: new Uint8Array([191, 64, 0, 213]), }, { id: 664, address: 4104, size: 4, mnemonic: 'msr', op_str: 'dbgdtrtx_el0, x12', bytes: new Uint8Array([12, 5, 19, 213]), }, { id: 1120, address: 4108, size: 4, mnemonic: 'tbx', op_str: 'v0.8b, {v1.16b, v2.16b, v3.16b}, v2.8b', bytes: new Uint8Array([32, 80, 2, 14]), }, { id: 785, address: 4112, size: 4, mnemonic: 'scvtf', op_str: 'v0.2s, v1.2s, #3', bytes: new Uint8Array([32, 228, 61, 15]), }, { id: 366, address: 4116, size: 4, mnemonic: 'fmla', op_str: 's0, s0, v0.s[3]', bytes: new Uint8Array([0, 24, 160, 95]), }, { id: 379, address: 4120, size: 4, mnemonic: 'fmov', op_str: 'x2, v5.d[1]', bytes: new Uint8Array([162, 0, 174, 158]), }, { id: 284, address: 4124, size: 4, mnemonic: 'dsb', op_str: 'nsh', bytes: new Uint8Array([159, 55, 3, 213]), }, { id: 282, address: 4128, size: 4, mnemonic: 'dmb', op_str: 'osh', bytes: new Uint8Array([191, 51, 3, 213]), }, { id: 430, address: 4132, size: 4, mnemonic: 'isb', op_str: '', bytes: new Uint8Array([223, 63, 3, 213]), }, { id: 666, address: 4136, size: 4, mnemonic: 'mul', op_str: 'x1, x1, x2', bytes: new Uint8Array([33, 124, 2, 155]), }, { id: 645, address: 4140, size: 4, mnemonic: 'lsr', op_str: 'w1, w1, #0', bytes: new Uint8Array([33, 124, 0, 83]), }, { id: 1082, address: 4144, size: 4, mnemonic: 'sub', op_str: 'w0, w0, w1, uxtw', bytes: new Uint8Array([0, 64, 33, 75]), }, { id: 558, address: 4148, size: 4, mnemonic: 'ldr', op_str: 'w1, [sp, #8]', bytes: new Uint8Array([225, 11, 64, 185]), }, { id: 149, address: 4152, size: 4, mnemonic: 'cneg', op_str: 'x0, x1, ne', bytes: new Uint8Array([32, 4, 129, 218]), }, { id: 6, address: 4156, size: 4, mnemonic: 'add', op_str: 'x0, x1, x2, lsl #2', bytes: new Uint8Array([32, 8, 2, 139]), }, { id: 558, address: 4160, size: 4, mnemonic: 'ldr', op_str: 'q16, [x24, w8, uxtw #4]', bytes: new Uint8Array([16, 91, 232, 60]), }, { id: 1035, address: 4164, size: 4, mnemonic: 'stp', op_str: 'x29, x30, [sp, #-0x60]!', bytes: new Uint8Array([253, 123, 186, 169]), }, { id: 558, address: 4168, size: 4, mnemonic: 'ldr', op_str: 'x29, [sp], #0x3c', bytes: new Uint8Array([253, 199, 67, 248]), }, ]); disassembler.close(); });