...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package x86_64
18
19 import (
20 `bytes`
21 `testing`
22
23 `github.com/cloudwego/iasm/expr`
24 `github.com/davecgh/go-spew/spew`
25 )
26
27 func TestProgram_Assemble(t *testing.T) {
28 a := CreateArch()
29 b := CreateLabel("bak")
30 s := CreateLabel("tab")
31 j := CreateLabel("jmp")
32 p := a.CreateProgram()
33 p.JMP (j)
34 p.JMP (j)
35 p.Link (b)
36 p.Data (bytes.Repeat([]byte { 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00 }, 15))
37 p.Data ([]byte { 0x0f, 0x1f, 0x00 })
38 p.JMP (b)
39 p.Link (j)
40 p.LEAQ (Ref(s), RDI)
41 p.MOVSLQ (Sib(RDI, RAX, 4, -4), RAX)
42 p.ADDQ (RDI, RAX)
43 p.JMPQ (RAX)
44 p.Align (32, expr.Int(0xcc))
45 p.Link (s)
46 p.Long (expr.Ref(s.Retain()).Sub(expr.Ref(j.Retain())))
47 p.Long (expr.Ref(s.Retain()).Sub(expr.Ref(b.Retain())))
48 spew.Dump(p.AssembleAndFree(0))
49 }
50
View as plain text