disassembler-x86-intel
Version:
An Intel x86 disassembler, generates assembly from Opcode
47 lines (37 loc) • 3.06 kB
text/typescript
import {suite, test} from '@testdeck/mocha';
import * as _chai from 'chai';
import {mergeMap, mergeMaps, mergeMapsMany} from '../src/helper/mergeMap';
import {Disassembler} from '../index';
import {MOD_RM_SET, Tabel} from '../src/constants/tables';
import {isNotANumber} from '../src/helper/isNotANumber';
import {mergeSets} from '../src/helper/mergeSets';
import {removeTrailingZero} from '../src/helper/removeTrailingZero';
_chai.should();
class DisasmTest {
before() {
}
'Testing add'() {
Disassembler.generateInstructions('8005');
}
'isNan'() {
const s1 = new Set([1]);
const s2 = new Set([2]);
const s3 = mergeSets(s1, s2);
console.log(s3);
}
'remove Zero'() {
console.log(removeTrailingZero('0011'));
console.log(removeTrailingZero('001100'));
console.log(removeTrailingZero('00110012'));
console.log(removeTrailingZero('0000000'));
}
'practical example'() {
const val = Disassembler.generateInstructions('B00066BE27006788046683C601040167880466B908006681E90200678A44FF6702046683C601678804E2F0');
val.should.eql(JSON.parse("[{\"instruction\":\"mov\",\"operand1\":{\"register\":\"al\"},\"operand2\":{\"value\":\"00\"},\"position\":0},{\"instruction\":\"mov\",\"operand1\":{\"register\":\"si\"},\"operand2\":{\"value\":\"27\"},\"position\":2},{\"instruction\":\"mov\",\"operand1\":{\"register\":\"si\",\"pointer\":\"b\"},\"operand2\":{\"register\":\"al\"},\"position\":6},{\"instruction\":\"add\",\"operand1\":{\"register\":\"si\"},\"operand2\":{\"value\":\"01\"},\"position\":9},{\"instruction\":\"add\",\"operand1\":{\"register\":\"al\"},\"operand2\":{\"value\":\"01\"},\"position\":13},{\"instruction\":\"mov\",\"operand1\":{\"register\":\"si\",\"pointer\":\"b\"},\"operand2\":{\"register\":\"al\"},\"position\":15},{\"instruction\":\"mov\",\"operand1\":{\"register\":\"cx\"},\"operand2\":{\"value\":\"8\"},\"position\":18},{\"instruction\":\"sub\",\"operand1\":{\"register\":\"cx\"},\"operand2\":{\"value\":\"2\"},\"position\":22},{\"instruction\":\"mov\",\"operand1\":{\"register\":\"al\"},\"operand2\":{\"register\":\"si\",\"displacement\":\"FF\",\"pointer\":\"b\"},\"position\":27},{\"instruction\":\"add\",\"operand1\":{\"register\":\"al\"},\"operand2\":{\"register\":\"si\",\"pointer\":\"b\"},\"position\":31},{\"instruction\":\"add\",\"operand1\":{\"register\":\"si\"},\"operand2\":{\"value\":\"01\"},\"position\":34},{\"instruction\":\"mov\",\"operand1\":{\"register\":\"si\",\"pointer\":\"b\"},\"operand2\":{\"register\":\"al\"},\"position\":38},{\"instruction\":\"loop\",\"operand1\":{\"value\":\"1b\"},\"position\":41}]"));
}
'negative disp'() {
const val = Disassembler.generateInstructions('678A44FF');
val.should.eql(JSON.parse("[{\"instruction\":\"mov\",\"operand1\":{\"register\":\"al\"},\"operand2\":{\"register\":\"si\",\"displacement\":\"-01\",\"pointer\":\"b\"},\"position\":0}]"));
}
}