about summary refs log tree commit diff
path: root/src/run.go
blob: 9783821ed0f9cf113130127c108e091a78007c4e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package main

import (
	"fmt"
	"strings"

	"github.com/radare/r2pipe-go"
)

// StepIn steps in and stores the state of the registers for the given bot
func stepIn(r2p *r2pipe.Pipe) string {
	_ = r2cmd(r2p, "aes")

	// store the regisers
	registers := r2cmd(r2p, "aerR")
	registersStripped := strings.Replace(registers, "\n", ";", -1)
	return registersStripped
}

func switchPlayer(r2p *r2pipe.Pipe, currentPlayer int, config Config) int {

	// calculate the index of the nextPlayer
	nextPlayer := (currentPlayer + 1) % len(config.Bots)

	// restore the registers to the state of the next bot
	r2cmd(r2p, config.Bots[nextPlayer].Regs)

	return nextPlayer
}

func user(r2p *r2pipe.Pipe, id int, registers string, config Config) string {
	var res string

	res += "\x1b[2J\x1b[0;0H"
	res += fmt.Sprintf("USER %d\n", id)
	res += fmt.Sprintf("%s\n", r2cmd(r2p, "aer"))
	res += "+++\n"
	//res += fmt.Sprintf("%s\n", r2cmd(r2p, fmt.Sprintf("%s %d @ 0\n", "prc=f", config.Memsize)))
	res += fmt.Sprintf("%s\n", r2cmd(r2p, fmt.Sprintf("%s %d @ 0\n", "prx", config.Memsize)))
	res += "+++\n"
	res += fmt.Sprintf("%s\n", r2cmd(r2p, "pxw 32 @r:SP"))

	r2command := fmt.Sprintf("pd %d @ %d", len(config.Bots[id].Source)/2, config.Bots[id].Addr)
	r2cmdString := r2cmd(r2p, r2command)
	res += fmt.Sprintf("%s\n", r2cmdString)

	return res
}