You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.5 KiB
67 lines
1.5 KiB
/* Keystone Assembler Engine (www.keystone-engine.org) */
|
|
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2016 */
|
|
/* Golang bindings by Remco Verhoef <remco@dutchcoders.io>, 2016 */
|
|
|
|
package keystone
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestVersion(t *testing.T) {
|
|
major, minor := Version()
|
|
if major == API_MAJOR && minor == API_MINOR {
|
|
} else {
|
|
t.Error(fmt.Errorf("Unexpected version: got %d.%d expected %d.%d", major, minor, 1, 0))
|
|
}
|
|
}
|
|
|
|
func TestArchitectureSupported(t *testing.T) {
|
|
if !ARCH_ARM.Supported() {
|
|
t.Error(fmt.Errorf("ARM not supported"))
|
|
}
|
|
}
|
|
|
|
type Test struct {
|
|
Architecture Architecture
|
|
Mode Mode
|
|
Address uint64
|
|
Assembly string
|
|
ExpectedResult []byte
|
|
}
|
|
|
|
type Syntax struct {
|
|
Syntax OptionValue
|
|
Tests []Test
|
|
}
|
|
|
|
var tests = []Syntax{
|
|
Syntax{
|
|
OPT_SYNTAX_INTEL, []Test{
|
|
Test{ARCH_X86, MODE_32 | MODE_LITTLE_ENDIAN, 0, "mov ah, al", []byte{0x88, 0xc4}},
|
|
},
|
|
},
|
|
}
|
|
|
|
func TestRun(t *testing.T) {
|
|
for _, st := range tests {
|
|
for _, tr := range st.Tests {
|
|
if ks, err := New(tr.Architecture, tr.Mode); err != nil {
|
|
t.Error(err)
|
|
} else {
|
|
defer ks.Close()
|
|
|
|
if err := ks.Option(OPT_SYNTAX, st.Syntax); err != nil {
|
|
t.Error(fmt.Errorf("Could not set syntax option to intel"))
|
|
} else if insn, _, ok := ks.Assemble(tr.Assembly, tr.Address); !ok {
|
|
t.Error(fmt.Errorf("Could not assemble instruction"))
|
|
} else if !reflect.DeepEqual(insn, tr.ExpectedResult) {
|
|
t.Error(fmt.Errorf("Not expected result: expected %#v got %#v", tr.ExpectedResult, insn))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|